<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    so true

    心懷未來,開創(chuàng)未來!
    隨筆 - 160, 文章 - 0, 評論 - 40, 引用 - 0
    數(shù)據(jù)加載中……

    trial for EnumVsInt TemplateForTypeTraits LocalClass

    #include <iostream>
    #include <typeinfo>
    #include <stdio.h>

    using namespace std;

    enum EM {ONE, TWO};

    void func(int i) {
        cout << __PRETTY_FUNCTION__ << endl;
    }

    void func(EM i) {
        cout << __PRETTY_FUNCTION__ << endl;
    }

    ////////////////////////////////////////////////////

    template <typename T>
    void trait(T t) {
        cout << __PRETTY_FUNCTION__ << endl;
    }

    template <typename R, typename C, typename Arg1>
    void trait_detail(R (C::*class_member_pointer)(Arg1)) {
        cout << __PRETTY_FUNCTION__ << endl;
    }

    ////////////////////////////////////////////////////

    class A {
    public:
        virtual void func() {
            cout << __PRETTY_FUNCTION__ << endl;
        }

        virtual A& reflect() {
            cout << __PRETTY_FUNCTION__ << endl;
            return *this;
        }
    };

    A* func_provide_local_class(int x = 0) {
        class LocalA: public A {
        public:
            LocalA(int x): m_x(x) {};
            virtual void func() {
                cout << __PRETTY_FUNCTION__ << endl;
            }

            virtual A& reflect() {
                return *this;
            }

        private:
            int m_x;
        };

        A* pa = new LocalA(x);
        cout << typeid(pa).name() << endl;
        return pa;
    }

    ////////////////////////////////////////////////////

    class B {
    public:
        virtual int func(double& d) = 0;
    };


    ////////////////////////////////////////////////////

    int main(int argc, char* argv[]) {
        //enum is also a specific type
        EM em = ONE;
        func(argc);
        func(em);
        trait(em);
        printf("--------------------------------------------\n");

        //trait in two ways
        trait(&B::func);
        trait_detail(&B::func);
        printf("--------------------------------------------\n");

        //trial for local class, for more information see as http://www.geeksforgeeks.org/local-class-in-c/ and http://www.cppblog.com/mzty/archive/2007/05/24/24766.html
        A* pa = func_provide_local_class();
        pa->func();
        printf("--------------------------------------------\n");

        //there's no way to use local class externally
        trait(pa);
        trait(pa->reflect());
        printf("--------------------------------------------\n");

        return 0;
    }
    =================== run result ====================
    void func(int)
    void func(EM)
    void trait(T) [with T = EM]
    --------------------------------------------
    void trait(T) [with T = int (B::*)(double&)]
    void trait_detail(R (C::*)(Arg1)) [with R = int, C = B, Arg1 = double&]
    --------------------------------------------
    P1A
    virtual void func_provide_local_class(int)::LocalA::func()
    --------------------------------------------
    void trait(T) [with T = A*]
    void trait(T) [with T = A]
    --------------------------------------------

    posted on 2015-03-06 17:51 so true 閱讀(237) 評論(0)  編輯  收藏 所屬分類: C&C++

    主站蜘蛛池模板: 国产成人亚洲精品狼色在线| 免费国产小视频在线观看| 亚洲高清视频在线观看| 久久av免费天堂小草播放| 亚洲欧洲中文日韩久久AV乱码| 精品国产亚洲第一区二区三区| 午夜高清免费在线观看| 亚洲精品无码专区| 免费国产不卡午夜福在线| 黄网站色成年片大免费高清 | 亚洲人成7777影视在线观看| 免费黄色福利视频| 亚洲18在线天美| 国产极品美女高潮抽搐免费网站| 日韩成人精品日本亚洲| 国产国拍亚洲精品福利| 久久成人免费电影| www.亚洲成在线| 免费人妻av无码专区| 三年片在线观看免费西瓜视频| 久久久久亚洲AV成人无码网站| 18以下岁毛片在免费播放| 亚洲一区二区三区免费视频| 国产成人免费a在线视频色戒| 国产精品福利在线观看免费不卡| 亚洲va中文字幕无码久久| 亚洲成人免费网站| 国产成人亚洲精品蜜芽影院| 伊人久久亚洲综合| 69式互添免费视频| 精品成人一区二区三区免费视频| 亚洲精品美女久久777777| 日本亚洲免费无线码| 九一在线完整视频免费观看| 亚洲日本中文字幕| 四虎永久在线免费观看| 久久精品视频免费看| 亚洲精品亚洲人成在线| 亚洲av日韩av激情亚洲| 热99re久久免费视精品频软件 | 男人j进女人p免费视频|