从一个模板函数聊聊模板函数里面如何获得T的名字
写了个小程序,遇到点问题.总结总结,学习学习
1 #include<vector> 2 #include<iostream> 3 #include<typeinfo> 4 5 using namespace std; 6 7 enum TYPE 8 { 9 T_INT, 10 T_BOOL, 11 T_CHAR, 12 }; 13 14 template <typename T> 15 void printTime( TYPE type ) 16 { 17 clock_t t; 18 vector<T> vc; 19 t = clock(); 20 for (int i = 0; i < 1000; i++) 21 { 22 for (int j = 0; j < 1000; j++) 23 { 24 //vc.push_back( reinterpret_cast<T>(0) ); 25 vc.push_back( 0 ); 26 } 27 } 28 t = clock() - t; 29 30 switch (type) //在这里要根据T打印不同的内容 31 { 32 case T_INT: 33 cout << "'vector<int>::push_back(true)' 1000000 times cost: " << t << endl; 34 break; 35 case T_BOOL: 36 cout << "'vector<bool>::push_back(true)' 1000000 times cost: " << t << endl; 37 break; 38 case T_CHAR: 39 cout << "'vector<char>::push_back(true)' 1000000 times cost: " << t << endl; 40 break; 41 } 42 43 t = clock(); 44 for (int i = 0; i < 1000; i++) 45 { 46 for (int j = 0; j < 1000; j++) 47 { 48 T value = vc[i * 1000 + j]; 49 } 50 } 51 t = clock() - t; 52 switch (type) //在这里要根据T打印不同的内容 53 { 54 case T_INT: 55 cout << "'vector<int>::operator[]' 1000000 times cost: " << t << endl; 56 break; 57 case T_BOOL: 58 cout << "'vector<bool>::operator[]' 1000000 times cost: " << t << endl; 59 break; 60 case T_CHAR: 61 cout << "'vector<char>::operator[]' 1000000 times cost: " << t << endl; 62 break; 63 } 64 } 65 int main() 66 { 67 printTime<int>(T_INT); 68 printTime<bool>(T_BOOL); 69 printTime<char>(T_CHAR); 70 return 0; 71 }
上面的打印结果是可行的,不过需要用一个枚举感觉很不爽啊..
结果常识了模板和宏结合的方法,结果没打印出理想结果.原因是 宏是先于模板展开的
看程序:
1 #include<vector> 2 #include<iostream> 3 #include<typeinfo> 4 5 using namespace std; 6 7 #define TOSTRING(x) #x 8 9 template <typename T> 10 void printTime() 11 { 12 clock_t t; 13 vector<T> vc; 14 t = clock(); 15 for (int i = 0; i < 1000; i++) 16 { 17 for (int j = 0; j < 1000; j++) 18 { 19 //vc.push_back( reinterpret_cast<T>(0) ); 20 vc.push_back( 0 ); 21 } 22 } 23 t = clock() - t; 24 cout << "'vector<"<<TOSTRING(T)<<">::push_back(true)' 1000000 times cost: " << t << endl; 25 26 t = clock(); 27 for (int i = 0; i < 1000; i++) 28 { 29 for (int j = 0; j < 1000; j++) 30 { 31 T value = vc[i * 1000 + j]; 32 } 33 } 34 t = clock() - t; 35 cout << "'vector<"<<TOSTRING(T)<<">::operator[]' 1000000 times cost: " << t << endl; 36 } 37 int main() 38 { 39 printTime<int>(); 40 printTime<bool>(); 41 printTime<char>(); 42 return 0; 43 }
请教了qq群的大神们,介绍了一个叫做typeid的关键字..所以在c++专栏下<typeid是什么>的帖子中学习学习这个东西