从一个模板函数聊聊模板函数里面如何获得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成员的权限. 比方: ...
随机推荐
- jdk的动态代理
至于jdk的动态代理怎么用此处并不多说,现在是更深一步的理解,jdk的Proxy类到底做了什么. Proxy.newProxyInstance可以生成代理类,此方法有三个参数(ClassLoader ...
- BSEG和BSIS、BSAS、BSID、BSAD、BSIK、BSAK六个表的关系(转)
BSEG和BSIS.BSAS.BSID.BSAD.BSIK.BSAK 六个表的关系 1.数据关系: BSAS+BSIS+BSAK+BSIK+BSAD+BSID = BSEG 2.六个表说明: clea ...
- GWT事件处理
package com.zly.client; import com.google.gwt.core.client.EntryPoint; import com.google.gwt.event.do ...
- jquerymobile-可折叠内容(Collapsible content)
可能我们在开发中遇到过这样的问题,我们只是看到一个题目或者简单的介绍,然后一点击会在下面展开对应的详细的内容.在jqm中实现这个效果很简单.下面给出一段例子代码: <!DOCTYPE html& ...
- ContentProvider与ContentResolver使用
例如以下内容为从网络转载: 使用ContentProvider共享数据: 当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就能够向其它应用共享其数据.虽然使用其它方 ...
- 如何让MFC程序关闭按钮失效,也无法右击任务栏关闭窗口来关闭?
如何让MFC程序关闭按钮失效,也无法右击任务栏关闭窗口来关闭,即右键任务栏的关闭窗口失效呢?很简单,有一个小窍门就是:响应IDCANCEL消息,具体实现如下: 首先定义消息映射:ON_BN_CLICK ...
- SVN状态图标不显示
Windows最多只允许15个覆盖图标,它自己又用了几个,结果给用户用的就11个左右了,如果你安装了其他网盘,那可用的就更少了. 解决方法: 1.在运行里输入regedit进入注册表 2.依次打开HK ...
- 父页面iframe自动适应子页面的宽高度
<script type="text/javascript"> function load(){ parent.document.getElementById(&quo ...
- radio的change事件
radio的change事件 <scripttype="text/javascript"> $(document).ready(function(){ $(" ...
- Orcle数据库恢复
不知道什么原因,服务器上的数据库报错:ORA-01033:ORACLE initialization or shutdown in progress 首先检查:监听文件的主机名及端口号是否更改 数据文 ...