zoukankan      html  css  js  c++  java
  • 从一个模板函数聊聊模板函数里面如何获得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是什么>的帖子中学习学习这个东西

  • 相关阅读:
    set
    皮肤病药物
    C 批量保存图片进 mysql 利用MYSQL_BIND插入longblob
    eclipse行号显示
    dynamic_cast使用
    list添加删除操作
    VS2008 对齐代码
    c++ mysql二进制存取,blob存取
    Select Window关键字——模拟打开了多个页面窗口时,在不同的窗口之间,进行窗口切换
    Click Image关键字——模拟单击某一个图片 其余:Click Button / Click Link
  • 原文地址:https://www.cnblogs.com/silentNight/p/5499588.html
Copyright © 2011-2022 走看看