从一个模板函数聊聊模板函数里面如何获得T的名字
写了个小程序,遇到点问题.总结总结,学习学习
#include<vector>
#include<iostream>
#include<typeinfo> using namespace std; enum TYPE
{
T_INT,
T_BOOL,
T_CHAR,
}; template <typename T>
void printTime( TYPE type )
{
clock_t t;
vector<T> vc;
t = clock();
for (int i = ; i < ; i++)
{
for (int j = ; j < ; j++)
{
//vc.push_back( reinterpret_cast<T>(0) );
vc.push_back( );
}
}
t = clock() - t; switch (type) //在这里要根据T打印不同的内容
{
case T_INT:
cout << "'vector<int>::push_back(true)' 1000000 times cost: " << t << endl;
break;
case T_BOOL:
cout << "'vector<bool>::push_back(true)' 1000000 times cost: " << t << endl;
break;
case T_CHAR:
cout << "'vector<char>::push_back(true)' 1000000 times cost: " << t << endl;
break;
} t = clock();
for (int i = ; i < ; i++)
{
for (int j = ; j < ; j++)
{
T value = vc[i * + j];
}
}
t = clock() - t;
switch (type) //在这里要根据T打印不同的内容
{
case T_INT:
cout << "'vector<int>::operator[]' 1000000 times cost: " << t << endl;
break;
case T_BOOL:
cout << "'vector<bool>::operator[]' 1000000 times cost: " << t << endl;
break;
case T_CHAR:
cout << "'vector<char>::operator[]' 1000000 times cost: " << t << endl;
break;
}
}
int main()
{
printTime<int>(T_INT);
printTime<bool>(T_BOOL);
printTime<char>(T_CHAR);
return ;
}

上面的打印结果是可行的,不过需要用一个枚举感觉很不爽啊..
结果常识了模板和宏结合的方法,结果没打印出理想结果.原因是 宏是先于模板展开的
看程序:
#include<vector>
#include<iostream>
#include<typeinfo> using namespace std; #define TOSTRING(x) #x template <typename T>
void printTime()
{
clock_t t;
vector<T> vc;
t = clock();
for (int i = ; i < ; i++)
{
for (int j = ; j < ; j++)
{
//vc.push_back( reinterpret_cast<T>(0) );
vc.push_back( );
}
}
t = clock() - t;
cout << "'vector<"<<TOSTRING(T)<<">::push_back(true)' 1000000 times cost: " << t << endl; t = clock();
for (int i = ; i < ; i++)
{
for (int j = ; j < ; j++)
{
T value = vc[i * + j];
}
}
t = clock() - t;
cout << "'vector<"<<TOSTRING(T)<<">::operator[]' 1000000 times cost: " << t << endl;
}
int main()
{
printTime<int>();
printTime<bool>();
printTime<char>();
return ;
}

请教了qq群的大神们,介绍了一个叫做typeid的关键字..所以在c++专栏下<typeid是什么>的帖子中学习学习这个东西
从一个模板函数聊聊模板函数里面如何获得T的名字的更多相关文章
- PHP模板引擎正则替换函数 preg_replace 与 preg_replace_callback 使用总结
在编写PHP模板引擎工具类时,以前常用的一个正则替换函数为 preg_replace(),加上正则修饰符 /e,就能够执行强大的回调函数,实现模板引擎编译(其实就是字符串替换). 详情介绍参考博文:P ...
- C++函数重载和函数模板
1.函数重载 这是小菜鸟写的一个例子. 函数重载应该注意以下几点: 1.1重载函数有类似的功能: 1.2只能以参数的类型(形参个数和类型)来重载函数, int max(int a,int b);flo ...
- C++ 模板函数与模板类
一.模板函数 函数模板提供了一类函数的抽象,即代表了一类函数.当函数模板被实例化后,它会生成具体的模板函数.例如下面便是一个函数模板:
- [Reprint] C++函数模板与类模板实例解析
这篇文章主要介绍了C++函数模板与类模板,需要的朋友可以参考下 本文针对C++函数模板与类模板进行了较为详尽的实例解析,有助于帮助读者加深对C++函数模板与类模板的理解.具体内容如下: 泛型编程( ...
- C++学习笔记之模板(1)——从函数重载到函数模板
一.函数重载 因为函数重载比较容易理解,并且非常有助于我们理解函数模板的意义,所以这里我们先来用一个经典的例子展示为什么要使用函数重载,这比读文字定义有效的多. 现在我们编写一个交换两个int变量值得 ...
- C++ primer(八)--内联函数 引用变量 引用传递函数参数 函数重载/模板/模板具体化
一.内联函数 常规函数和内联函数的区别在于C++编译器如何将他们组合到程序中.编译过程的最终产品是可执行程序--由一组机器语言指令组成.运行程序时,操作系统将这些指令载入到计算机内存中,因此每 ...
- c++复习基础要点02 虚函数与模板 与static inline是否共存
1. 虚函数能否定义为模板函数 当一个类有虚函数时,它一定有一个虚表,用来纪录每个虚函数的实际地址.这也就是说这个虚表的大小是在编译期就确定了的.有多少个虚函数,虚表就纪录几个. ...
- C++普通函数与模板函数以及特化函数重载的优先级问题
在面对C++模板的时候,需要十分注意,因为模板的复杂性有很多情况,所以最好学习模板的方法我个人认为就是用到就去学,用不到就尽量别去看各种奇门怪技,因为你就算看了,好不容易搞懂模板的实现内部了,包括元编 ...
- gcc的bug? c++模板类中友元函数的訪问权限问题
原文地址:http://stackoverflow.com/q/23171337/3309790 在c++中,模板类中能够直接定义一个友元函数.该函数拥有訪问该模板类非public成员的权限. 比方: ...
随机推荐
- CentOS源码安装搭建LNMP全过程(包括nginx,mysql,php,svn)【转】
转自:http://blog.csdn.net/yanzi1225627/article/details/49123659 服务器环境为:CentOS6.5 64位 目标:搭建LNMP(Linux + ...
- linux 环境下java环境配置
vi + /etc/profile向文件里面追加以下内容:JAVA_HOME=/usr/local/java7JRE_HOME=/usr/local/java7/jrePATH=$PATH:$JAVA ...
- [C#] 常用工具类——系统日志类
using System; using System.Collections.Generic; using System.Text; using System.Diagnostics; namespa ...
- Excel中如何查找并列出所有链接(外部数据链接)?
在 Excel 中,有时会需要创建外部链接来引用其他工作簿的单元格内容,但是如果想要找出所有链接并且还要将这些外部数据链接列在一个工作簿当中是有点难度的.下面我会介绍一些快捷方法,不仅能够快速帮你找出 ...
- MVC中一般为什么用IQueryable而不是用IList
IList(IList<T>)会立即在内存里创建持久数据,这就没有实现“延期执行(deferred execution)”,如果被加载的实体有关联实体(associations),此关联实 ...
- C#实现FTP文件夹下载功能【转载】
网上有很多FTP单个文件下载的方法,前段时间需要用到一个FTP文件夹下载的功能,于是找了下网上的相关资料结合MSDN实现了一段FTP文件夹下载的代码. 实现的思路主要是通过遍历获得文件夹下的所有文件, ...
- [PHP] find ascii code in string
if (strpos($data ,chr(0x95)) !== false) { echo 'true'; }else{ echo "false"; }
- Android 完美退出 App (Exit)
最近两天为了解决Android上面退出程序问题折腾了半死,在google & baidu 上面找了很久.很久出来的完全千篇一律,说的方法有三,但是经过我试验后全部不行. 三个方法分别是: ki ...
- 24小时学通LINUX内核系列
http://www.cnblogs.com/lihuidashen/category/667475.html
- LabView 快捷键
对象调整和移动Shift-click 选择多个对象,在现有选择的基础上添加对象(方向键) 以一个像素为单位移动所选对象Shift- 以几个像素为单位移动所选对象Shift-click (拖动对象) 在 ...