• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            visualfc

              C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              42 隨筆 :: 0 文章 :: 119 評(píng)論 :: 0 Trackbacks
            原創(chuàng) visualfc

            介紹一個(gè)通用c++ typeid實(shí)現(xiàn).

            主要功能:
                通用的typeid實(shí)現(xiàn),可以在VS60/VS2005以及mingw32下保證相同的類型名輸出.
                程序使用boost::type_traits來(lái)實(shí)現(xiàn),沒(méi)有使用內(nèi)置的typeid.不支持RTTI操作.

            項(xiàng)目地址:
                http://code.google.com/p/typeid

            程序例子:
            1.  vfc::type_id(100).name();    // output "int"
            2.  vfc::type_id_t<int>::name(); // output "int"
            3.  vfc::type_id_t<const int &>::name(); // output "int const &"

            4.  struct a 
            5.  {
            6.      const int * test(intconst char *);
            7.  };
            8.  VFC_MAKE_ID(a,0x2003);

            9.  vfc::type_id(&a::test).name(); //output  "int const * (a::*)(int,char const *)"
            主要類介紹:
               template<typename T>  vfc::type_id_t<>  獲取類型的typeid名
               template<typename T>  vfc::type_id(const T & t) 獲取變量的類型的type_id_t類型.

            主要函數(shù):
               type_id(100).std_name() 輸出 std::string 類型的name
               type_id(100).name()     輸出 const char * 類型的name

            定義類型:
               VFC_TYPE_ID(type,id) 實(shí)現(xiàn)類型的定義,type為類型,id為類型自定義數(shù)值標(biāo)識(shí)
            例: VFC_TYPE_ID(std::string,0x2001)


            下面給出一個(gè)完整的例子:  

            1. #include "vfc_type.h"
            2. struct a
            3. {
            4.     const int * test(int,int)
            5.     {
            6.         return NULL;
            7.     }

            8.     void test1() const
            9.     {
            10.     }
            11.     const char * test2(intintvolatile
            12.     {
            13.         return NULL;
            14.     }
            15.     const int & test3(int *, const char *) const volatile
            16.     {
            17.         static int i = 100;
            18.         return i;
            19.     }
            20. };

            21. void test(const char *, int k)
            22. {
            23. };

            24. VFC_TYPE_ID(a,0x2000);



            25. int main(int argc, char* argv[])
            26. {
            27.     typedef void (*T1)(void);
            28.     typedef int (*T2)(void);
            29.     typedef int (*T3)(int,int,int,int,int,int,int,int,int);
            30.     typedef const char * (*T4)(int &,int *,char **,char &,const int &);

            31.     typedef int U1;
            32.     typedef int U2[5];
            33.     typedef const int & U3;
            34.     typedef char U4[5][6][7];

            35.     printf("T1 type %s\n",vfc::type_id_t<T1>::name());
            36.     printf("T2 type %s\n",vfc::type_id_t<T2>::name());
            37.     printf("T3 type %s\n",vfc::type_id_t<T3>::name());
            38.     printf("T4 type %s\n",vfc::type_id_t<T4>::name());

            39.     printf("U1 type %s\n",vfc::type_id_t<U1>::name());
            40.     printf("U2 type %s\n",vfc::type_id_t<U2>::name());
            41.     printf("U3 type %s\n",vfc::type_id_t<U3>::name());
            42.     printf("U4 type %s\n",vfc::type_id_t<U4>::name());

            43.     printf("\'d\' type %s\n",vfc::type_id('d').name());
            44.     printf("100 type %s\n",vfc::type_id(100).name());
            45.     printf("100.0 type %s\n",vfc::type_id(100.0).name());
            46.     printf("\"str\" type %s\n",vfc::type_id("str").name());

            47.     const char * str = "ok";
            48.     printf("const char * str type %s\n",vfc::type_id(str).name());

            49.     a * pa;
            50.     printf("a type %s\n",vfc::type_id_t<a>::name());
            51.     printf("pa type %s\n",vfc::type_id(pa).name());
            52.     printf("a::test type %s\n",vfc::type_id(&a::test).name());
            53.     printf("a::test type %s\n",vfc::type_id(&a::test1).name());
            54.     printf("a::test type %s\n",vfc::type_id(&a::test2).name());
            55.     printf("a::test type %s\n",vfc::type_id(&a::test3).name());
            56.     printf("test %s\n",vfc::type_id(&test).name());

            57.     return 0;
            58. }
            在VS60,VS2005和mingw32下編譯得到相同輸出結(jié)果如下:
            1. T1 type void (*)()
            2. T2 type int (*)()
            3. T3 type int (*)(int,int,int,int,int,int,int,int,int)
            4. T4 type char const * (*)(int &,int *,char * *,char &,int const &)
            5. U1 type int
            6. U2 type int [5]
            7. U3 type int const &
            8. U4 type char [7] [6] [5]
            9. 'd' type char
            10. 100 type int
            11. 100.0 type double
            12. "str" type char [4]
            13. const char * str type char const *
            14. a type a
            15. pa type a *
            16. a::test type int const * (a::*)(int,int)
            17. a::test type void (a::*)()const
            18. a::test type char const * (a::*)(int,int)volatile
            19. a::test type int const & (a::*)(int *,char const *)const volatile
            20. test void (*)(char const *,int)
            posted on 2008-11-03 22:22 visualfc 閱讀(2253) 評(píng)論(2)  編輯 收藏 引用 所屬分類: C++

            評(píng)論

            # re: 通用C++ typeid實(shí)現(xiàn)(不支持RTTI) 2008-11-04 00:06 踏雪赤兔
            看了一下代碼,貌似不是線程安全的,呵呵~
            繼續(xù)努力!  回復(fù)  更多評(píng)論
              

            # re: 通用C++ typeid實(shí)現(xiàn)(不支持RTTI)[未登錄](méi) 2008-11-04 07:58 visualfc
            謝謝提醒.
            看來(lái)為了線程安全, 可能得將type_id_t<T>::name()接口改為type_id_t<T>().name()了.  回復(fù)  更多評(píng)論
              

            中文字幕久久欲求不满| 2021国内久久精品| 欧美精品一本久久男人的天堂| 国产成人精品白浆久久69| 久久国产视频网| 人妻丰满AV无码久久不卡| 国产精品久久久久乳精品爆| 99久久免费国产精品特黄| 亚洲午夜精品久久久久久人妖| 亚洲精品国产综合久久一线| 国产精品欧美久久久天天影视 | 手机看片久久高清国产日韩| 精品熟女少妇AV免费久久| 成人精品一区二区久久久| 精品久久无码中文字幕| 蜜臀久久99精品久久久久久| 久久99国产精品久久99| 亚洲中文字幕无码久久精品1| 精品无码久久久久久国产| 久久午夜伦鲁片免费无码| 久久久无码精品亚洲日韩京东传媒| 久久中文娱乐网| 2020最新久久久视精品爱| 99久久婷婷免费国产综合精品| 亚洲va久久久噜噜噜久久狠狠 | 奇米影视7777久久精品| 亚洲国产成人精品久久久国产成人一区二区三区综 | 久久精品夜色噜噜亚洲A∨| 国内精品久久久久久99| 7777久久久国产精品消防器材| 欧美日韩中文字幕久久久不卡| 91久久精品无码一区二区毛片| 久久精品蜜芽亚洲国产AV| 麻豆成人久久精品二区三区免费| 久久久久久国产精品无码下载 | 久久99国产精品久久| 99久久婷婷免费国产综合精品| 久久超乳爆乳中文字幕| 国产精品免费看久久久| 久久精品中文闷骚内射| 久久国产乱子精品免费女|