<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无码片vr一区二区三区| 国产精品麻豆免费版| 免费观看91视频| 亚洲高清免费视频| 激情无码亚洲一区二区三区| 亚洲成人黄色在线| 久久精品国产精品亚洲艾草网| 亚洲AⅤ无码一区二区三区在线| 日韩一区二区a片免费观看 | 亚洲一级毛片免费在线观看| 国产精品成人免费观看| 国产亚洲精品成人久久网站| 亚洲最大的黄色网| 亚洲白嫩在线观看| 亚洲视频一区在线| 亚洲综合在线观看视频| 国产成人亚洲精品青草天美| 国产亚洲成人久久| 中文字幕第13亚洲另类| 亚洲人成网站色在线入口| 国产一区二区三区无码免费| 四虎成人免费影院网址| 成人av免费电影| 在线看片人成视频免费无遮挡| 国产成在线观看免费视频| 一个人看的www在线观看免费| 2022久久国产精品免费热麻豆| 国产婷婷成人久久Av免费高清| 国产性生大片免费观看性| 中文字幕在线免费看| 美女被免费网站91色| 三年在线观看免费观看完整版中文| 尤物视频在线免费观看| 一级视频在线免费观看| 国产三级在线免费观看| 成人av片无码免费天天看| 在线成人精品国产区免费| 久久精品中文字幕免费| 久视频精品免费观看99| 97免费人妻无码视频|