从一个模板函数聊聊模板函数里面如何获得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成员的权限. 比方: ...
随机推荐
- 5步做好vsftpd
系统:centos6.5 X86 1、yum -y install vsftpd 2、vim /etc/vsftpd/vsftpd.conf 可以用cat vsftpd.conf | grep -v ...
- Excel中如何查找并列出所有链接(外部数据链接)?
在 Excel 中,有时会需要创建外部链接来引用其他工作簿的单元格内容,但是如果想要找出所有链接并且还要将这些外部数据链接列在一个工作簿当中是有点难度的.下面我会介绍一些快捷方法,不仅能够快速帮你找出 ...
- JSON和JAVA的POJO的相互转换【转载】
该类中用用到的jar包:参加文章<使用json-lib进行Java和JSON之间的转换[转载]> import java.util.Collection; import java.util ...
- Jafka来源分析——文章
Kafka它是一个分布式消息中间件,我们可以大致分为三个部分:Producer.Broker和Consumer.当中,Producer负责产生消息并负责将消息发送给Kafka:Broker能够简单的理 ...
- oracle6
转换函数 介绍 转换函数用于将数据类型从一种转为另外一种.在某些情况下,oracle server允许值的数据类型和实际的不一样,这时oracle server会隐含的转化数据类型 比如: crea ...
- Mysql show Status参数详解
状态名 作用域 详细解释 Aborted_clients Global 由于客户端没有正确关闭连接导致客户端终止而中断的连接数 Aborted_connects Global 试图连接到MySQL服务 ...
- MYSQL 5.7 MTS 复制
http://www.linuxidc.com/Linux/2013-04/82712p2.htm http://keithlan.github.io/2016/06/28/MTS/ http://d ...
- GO的跨平台数扰类型
基本数据类型的包装: 1.跨平台,用于移植 2.不同的框架类型包装的类型(MFC ,WIN32SDK,C) 3.基本数据类型的组装成的结构体 4.宏定义 数字类型 Go 也有基于架构的类型,例如:in ...
- CPP: 跨平台生成GUID/UUID
#ifndef XGUID_H#define XGUID_H #include <string>#include <stdio.h>#ifdef WIN32#include & ...
- oracle分组查询
分组函数 在分组函数中,如果有一个查找项分组,其他项必须也分组,比如下面的语句会报错,因为sal分组了,而ename没有分组: 1.显示工资最高的员工: 2.显示所有员工的平均工资: 2.1使用系统函 ...