原创 visualfc 介绍一个通用c++ typeid实现.主要功能: 通用的typeid实现,可以在VS60/VS2005以及mingw32下保证相同的类型名输出. 程序使用boost::type_traits来实现,没有使用内置的typeid.不支持RTTI操作. 局限: 目前版本v0.2仅实现一层function_ptr和member_function_ptr解析操作. 版本历史: v0.2 不再使用std::string.去除了std_name成员函数 将 vfc::type_id_t<T>::name() 更改为 vfc::type_id_t<T>().name() 项目地址: http://code.google.com/p/typeid 主要类介绍: template<typename T> vfc::type_id_t<> 获取类型的typeid名 template<typename T> vfc::type_id(const T & t) 获取变量的类型的type_id_t类型. 主要函数: type_id_t<int>().name() 输出 const char * 类型的typename type_id(100).name() 输出 const char * 类型的typename 定义类型: VFC_TYPE_ID(type,id) 实现类型的定义,type为类型,id为类型自定义数值标识 例: VFC_TYPE_ID(std::string,0x2001) 下面给出一个完整的例子: 1 #include <stdio.h> 在VC60/ VC2003/VC2005/MinGW32下输出相同运行结果2 #include "vfc_type.h" 3 4 struct a 5 { 6 const int * test(int,int) 7 { 8 return NULL; 9 } 10 11 void test1() const 12 { 13 } 14 const char * test2(int, int) volatile 15 { 16 return NULL; 17 } 18 const int & test3(int *, const char *) const volatile 19 { 20 static int i = 100; 21 return i; 22 } 23 }; 24 25 void test(const char *, int k) 26 { 27 }; 28 29 VFC_TYPE_ID(a,0x2000); 30 31 32 int main(int argc, char* argv[]) 33 { 34 typedef void (*T1)(void); 35 typedef int (*T2)(void); 36 typedef int (*T3)(int,int,int,int,int,int,int,int,int); 37 typedef const char * (*T4)(int &,int *,char **,char &,const int &); 38 39 typedef int U1; 40 typedef int U2[5]; 41 typedef const int & U3; 42 typedef char U4[5][6][7]; 43 44 printf("T1 type %s/n",vfc::type_id_t<T1>().name()); 45 printf("T2 type %s/n",vfc::type_id_t<T2>().name()); 46 printf("T3 type %s/n",vfc::type_id_t<T3>().name()); 47 printf("T4 type %s/n",vfc::type_id_t<T4>().name()); 48 49 printf("U1 type %s/n",vfc::type_id_t<U1>().name()); 50 printf("U2 type %s/n",vfc::type_id_t<U2>().name()); 51 printf("U3 type %s/n",vfc::type_id_t<U3>().name()); 52 printf("U4 type %s/n",vfc::type_id_t<U4>().name()); 53 54 printf("/'d/' type %s/n",vfc::type_id('d').name()); 55 printf("100 type %s/n",vfc::type_id(100).name()); 56 printf("100.0 type %s/n",vfc::type_id(100.0).name()); 57 printf("/"str/" type %s/n",vfc::type_id("str").name()); 58 59 const char * str = "ok"; 60 printf("const char * str type %s/n",vfc::type_id(str).name()); 61 62 a * pa; 63 printf("a type %s/n",vfc::type_id_t<a>().name()); 64 printf("pa type %s/n",vfc::type_id(pa).name()); 65 printf("a::test type %s/n",vfc::type_id(&a::test).name()); 66 printf("a::test type %s/n",vfc::type_id(&a::test1).name()); 67 printf("a::test type %s/n",vfc::type_id(&a::test2).name()); 68 printf("a::test type %s/n",vfc::type_id(&a::test3).name()); 69 printf("test %s/n",vfc::type_id(&test).name()); 70 71 typedef int (a::*TT)(const int *,char) const volatile; 72 const TT * tt; 73 printf("TT type %s/n",vfc::type_id_t<TT>().name()); 74 printf("const TT * type %s/n",vfc::type_id(tt).name()); 75 76 return 0; 77 } 78 T1 type void (*)()
T2 type int (*)() T3 type int (*)(int,int,int,int,int,int,int,int,int) T4 type char const * (*)(int &,int *,char * *,char &,int const &) U1 type int U2 type int [5] U3 type int const & U4 type char [7] [6] [5] 'd' type char 100 type int 100.0 type double "str" type char [4] const char * str type char const * a type a pa type a * a::test type int const * (a::*)(int,int) a::test type void (a::*)()const a::test type char const * (a::*)(int,int)volatile a::test type int const & (a::*)(int *,char const *)const volatile test void (*)(char const *,int) TT type int (a::*)(int const *,char)const volatile const TT * type int (a::*const *)(int const *,char)const volatile
更多
0
|
|