⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.cpp

📁 [2005最新C++经典著作].C++ Programming.新手必看的学VC的奠基之著。
💻 CPP
字号:
// Copyright (C) 2004 Arkadiy Vertleyb// Use, modification and distribution is subject to the Boost Software// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)#pragma message("including typeof.hpp...")#include <boost/spirit/typeof/typeof.hpp>#pragma message("done")#include <boost/noncopyable.hpp>#include <boost/type_traits/is_same.hpp>#ifdef BOOST_TYPEOF_EMULATION#pragma message("registering")#include "stl/register.hpp"#include "mpl/register.hpp"#include "spirit/register.hpp"#include "lambda/register.hpp"#pragma message("done")#endif//BOOST_TYPEOF_EMULATION#include <cassert>#include <iostream>#include <vector>#include <boost/lambda/lambda.hpp>#include <boost/spirit.hpp>#include <boost/mpl/vector.hpp>#include "typeid.hpp"using namespace std;#pragma message("started")double f_0(){    cout << "functions with no params" << endl;    return 0;}double f_9(int, double, short, char*, bool, char, float, long, unsigned short){    cout << "functions with 9 params" << endl;    return 0;}void vf_0(){    cout << "void functions with 0 params" << endl;}void vf_9(int, double, short, char*, bool, char, float, long, unsigned short){    cout << "void functions with 9 params" << endl;}struct x{    int f_0() volatile    {        cout << "member functions with no params" << endl;        return 0;    }    int f_9(int, double, char, int, double, char, int, double, char)    {        cout << "member functions with 9 params" << endl;        return 0;    }    void vf_0()    {        cout << "void member functions with no params" << endl;    }    void vf_9(int, double, char, int, double, char, int, double, char)    {        cout << "void member functions with 9 params" << endl;    }    int cf_0() const volatile    {        cout << "const member functions with no params" << endl;        return 0;    }    int cf_9(int, double, char, int, double, char, int, double, char) const    {        cout << "const member functions with 9 params" << endl;        return 0;    }    void cvf_0() const    {        cout << "const void member functions with no params" << endl;    }    void cvf_9(int, double, char, int, double, char, int, double, char) const    {        cout << "const void member functions with 9 params" << endl;    }    static void sf_0()    {        cout << "static member function" << endl;    }    std::vector<int> m_v;};struct noncop : boost::noncopyable{};const noncop& foo_nc(){    static noncop nc;    return nc;}template<class T, char c, unsigned short us,     int i, unsigned long ul, bool b1, bool b2, unsigned u> struct with_integrals{};#ifdef BOOST_TYPEOF_EMULATION#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()BOOST_TYPEOF_REGISTER_TYPE(x)BOOST_TYPEOF_REGISTER_TEMPLATE_X(with_integrals,     (class)    (char)    (unsigned short)    (int)    (unsigned long)    (bool)    (bool)    (unsigned)    );BOOST_TYPEOF_REGISTER_TYPE(noncop)#endif// BOOST_TYPEOF_EMULATIONmain(){#pragma message("integral...")    {        with_integrals<int, 5, 4, 3, 2, true, false, 5> expr;        BOOST_AUTO(v, expr);        v;        with_integrals<int, 1, 1, 0, ULONG_MAX, false, true, 0> expr1;        BOOST_AUTO(v1, expr1);        v1;    }#pragma message("Noncopyable...")    {        //BOOST_AUTO(v, foo_nc());        BOOST_AUTO(const& v, foo_nc());    }#pragma message("Lvalue preserving...")    {        int n;        const int cn = 0;        int& rn = n;        const int& rcn = cn;        int f();        //const int cf();        int& rf();        const int& rcf();        cout << type_id<BOOST_TYPEOF_PRESERVE_LVALUE(n)>::name() << endl;        cout << type_id<BOOST_TYPEOF_PRESERVE_LVALUE(cn)>::name() << endl;        cout << type_id<BOOST_TYPEOF_PRESERVE_LVALUE(rn)>::name() << endl;        cout << type_id<BOOST_TYPEOF_PRESERVE_LVALUE(rcn)>::name() << endl;        cout << type_id<BOOST_TYPEOF_PRESERVE_LVALUE(f())>::name() << endl;        //cout << type_id<BOOST_TYPEOF_PRESERVE_LVALUE(cf())>::name() << endl;        cout << type_id<BOOST_TYPEOF_PRESERVE_LVALUE(rf())>::name() << endl;        cout << type_id<BOOST_TYPEOF_PRESERVE_LVALUE(rcf())>::name() << endl;        cout << type_id<BOOST_TYPEOF_PRESERVE_LVALUE(21)>::name() << endl;        cout << type_id<BOOST_TYPEOF_PRESERVE_LVALUE(int(21))>::name() << endl;        BOOST_STATIC_ASSERT((boost::is_same<BOOST_TYPEOF_PRESERVE_LVALUE(n), int&>::value));        BOOST_STATIC_ASSERT((boost::is_same<BOOST_TYPEOF_PRESERVE_LVALUE(cn), const int&>::value));        BOOST_STATIC_ASSERT((boost::is_same<BOOST_TYPEOF_PRESERVE_LVALUE(rn), int&>::value));        BOOST_STATIC_ASSERT((boost::is_same<BOOST_TYPEOF_PRESERVE_LVALUE(rcn), const int&>::value));        BOOST_STATIC_ASSERT((boost::is_same<BOOST_TYPEOF_PRESERVE_LVALUE(f()), int>::value));        //BOOST_STATIC_ASSERT((boost::is_same<BOOST_TYPEOF_PRESERVE_LVALUE(cf()), const int&>::value));        BOOST_STATIC_ASSERT((boost::is_same<BOOST_TYPEOF_PRESERVE_LVALUE(rf()), int&>::value));        BOOST_STATIC_ASSERT((boost::is_same<BOOST_TYPEOF_PRESERVE_LVALUE(rcf()), const int&>::value));        BOOST_STATIC_ASSERT((boost::is_same<BOOST_TYPEOF_PRESERVE_LVALUE(21), int>::value));        BOOST_STATIC_ASSERT((boost::is_same<BOOST_TYPEOF_PRESERVE_LVALUE(int(21)), int>::value));    }#pragma message("compiling Lambda example...")    {        using namespace boost::lambda;        BOOST_AUTO(fun, _1 > 15 && _2 < 20);        int n = 19;        assert(fun(n, n));        std::cout << typeid(fun).name() << std::endl;    }#pragma message("compiling Spirit example...")    {        // spirit example        using namespace boost::spirit;        using namespace boost::lambda;        using namespace std;        vector<double> v;        BOOST_AUTO(parser,            (real_p[push_back_a(v)] >> *(',' >> real_p[push_back_a(v)]))            );        parse("3.14159, 2.71828", parser, space_p);        for_each(v.begin(), v.end(), cout << _1 << ' ');        cout << endl;    }#pragma message("compiling another Spirit example...")    {        // more spirit...                using namespace boost::spirit;        BOOST_AUTO(            skipper,            (       space_p                |   "//" >> *(anychar_p - '\n') >> '\n'                |   "/*" >> *(anychar_p - "*/") >> "*/"            )        );        bool success = parse(            "/*this is a comment*/\n//this is a c++ comment\n\n",            *skipper).full;        assert(success);    }#pragma message("compiling Modifiers example...")    {        //modifiers        using namespace std;        using namespace boost;        // top-level pointers are preserved...        mpl::vector3<const int* const, const int[20], const int&>* foo();        cout << typeid(BOOST_TYPEOF(foo())).name() << endl;        // ... but top-level refs are not :(        mpl::vector2<const int* const, const int&>& bar();        cout << typeid(BOOST_TYPEOF(bar())).name() << endl;                mpl::vector1<int[5]> vi;        cout << "int[5]" << endl;        cout << typeid(BOOST_TYPEOF(vi)).name() << endl;        mpl::vector1<const int[5]> vci;        cout << "const int[5]" << endl;        cout << typeid(BOOST_TYPEOF(vci)).name() << endl;    }#pragma message("compiling functions example...")    {        BOOST_AUTO(p0, &f_0);        (*p0)();                BOOST_AUTO(p9, &f_9);        (*p9)(0, 0, 0, 0, 0, 0, 0, 0, 0);    }#pragma message("compiling void functions example...")    {        BOOST_AUTO(p0, &vf_0);        (*p0)();                BOOST_AUTO(p9, &vf_9);        (*p9)(0, 0, 0, 0, 0, 0, 0, 0, 0);    }#pragma message("compiling member functions example...")    {        x xx;        BOOST_AUTO(p0, &x::f_0);        (xx.*p0)();                BOOST_AUTO(p9, &x::f_9);        (xx.*p9)(0, 0, 0, 0, 0, 0, 0, 0, 0);    }#pragma message("compiling void member functions example...")    {        x xx;        BOOST_AUTO(p0, &x::vf_0);        (xx.*p0)();                BOOST_AUTO(p9, &x::vf_9);        (xx.*p9)(0, 0, 0, 0, 0, 0, 0, 0, 0);    }#pragma message("compiling const member functions example...")    {        x xx;        BOOST_AUTO(p0, &x::cf_0);        (xx.*p0)();                BOOST_AUTO(p9, &x::cf_9);        (xx.*p9)(0, 0, 0, 0, 0, 0, 0, 0, 0);    }#pragma message("compiling const void member functions example...")    {        x xx;        BOOST_AUTO(p0, &x::cvf_0);        (xx.*p0)();                BOOST_AUTO(p9, &x::cvf_9);        (xx.*p9)(0, 0, 0, 0, 0, 0, 0, 0, 0);    }#pragma message("compiling static member functions example...")    {        BOOST_AUTO(p0, &x::sf_0);        (*p0)();    }#pragma message("pointers to data members...")    {        BOOST_AUTO(p, &x::m_v);        x xx;        (xx.*p).push_back(1);    }#pragma message("ODR")    void odr_test1();    void odr_test2();    odr_test1();    odr_test2();#pragma message("done!")}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -