写了个小程序,遇到点问题.总结总结,学习学习

 #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的名字的更多相关文章

  1. PHP模板引擎正则替换函数 preg_replace 与 preg_replace_callback 使用总结

    在编写PHP模板引擎工具类时,以前常用的一个正则替换函数为 preg_replace(),加上正则修饰符 /e,就能够执行强大的回调函数,实现模板引擎编译(其实就是字符串替换). 详情介绍参考博文:P ...

  2. C++函数重载和函数模板

    1.函数重载 这是小菜鸟写的一个例子. 函数重载应该注意以下几点: 1.1重载函数有类似的功能: 1.2只能以参数的类型(形参个数和类型)来重载函数, int max(int a,int b);flo ...

  3. C++ 模板函数与模板类

    一.模板函数 函数模板提供了一类函数的抽象,即代表了一类函数.当函数模板被实例化后,它会生成具体的模板函数.例如下面便是一个函数模板:

  4. [Reprint] C++函数模板与类模板实例解析

    这篇文章主要介绍了C++函数模板与类模板,需要的朋友可以参考下   本文针对C++函数模板与类模板进行了较为详尽的实例解析,有助于帮助读者加深对C++函数模板与类模板的理解.具体内容如下: 泛型编程( ...

  5. C++学习笔记之模板(1)——从函数重载到函数模板

    一.函数重载 因为函数重载比较容易理解,并且非常有助于我们理解函数模板的意义,所以这里我们先来用一个经典的例子展示为什么要使用函数重载,这比读文字定义有效的多. 现在我们编写一个交换两个int变量值得 ...

  6. C++ primer(八)--内联函数 引用变量 引用传递函数参数 函数重载/模板/模板具体化

    一.内联函数     常规函数和内联函数的区别在于C++编译器如何将他们组合到程序中.编译过程的最终产品是可执行程序--由一组机器语言指令组成.运行程序时,操作系统将这些指令载入到计算机内存中,因此每 ...

  7. c++复习基础要点02 虚函数与模板 与static inline是否共存

    1.      虚函数能否定义为模板函数 当一个类有虚函数时,它一定有一个虚表,用来纪录每个虚函数的实际地址.这也就是说这个虚表的大小是在编译期就确定了的.有多少个虚函数,虚表就纪录几个.       ...

  8. C++普通函数与模板函数以及特化函数重载的优先级问题

    在面对C++模板的时候,需要十分注意,因为模板的复杂性有很多情况,所以最好学习模板的方法我个人认为就是用到就去学,用不到就尽量别去看各种奇门怪技,因为你就算看了,好不容易搞懂模板的实现内部了,包括元编 ...

  9. gcc的bug? c++模板类中友元函数的訪问权限问题

    原文地址:http://stackoverflow.com/q/23171337/3309790 在c++中,模板类中能够直接定义一个友元函数.该函数拥有訪问该模板类非public成员的权限. 比方: ...

随机推荐

  1. C#中npoi操作Excel[版本2.0.1读写2003、2007格式]

    下载npoi2.0.1dll文件:http://download.csdn.net/detail/pukuimin1226/5851747 public static void test1()     ...

  2. 站在巨人的肩膀上学习Android开发

    我们知道,一開始最好的学习方法是模仿,尤其是模仿巨人. 那说到Android开发的模仿自然就是分析并研究主流程序的布局.实现方法.进而提升自己的技术. 第一招----逆向project 要分析&quo ...

  3. AndroidUI组件之ActionBar--基于下拉的导航方式

      在上一篇关于ActionBar的博文中.我们知道了ActionBar是Android3.0的重要更新之中的一个.本篇博文就来写一个开发中经经常使用到的样例.用ActionBar提供基于下拉的导航方 ...

  4. [Webpack 2] Maintain sane file sizes with webpack code splitting

    As a Single Page Application grows in size, the size of the payload can become a real problem for pe ...

  5. 数据库修复工具 - DatabaseCompressor 之从9M到900K+

    数据库修复工具 - 仅限 *.mdb 格式的Access 数据库 引言: Access数据库操作有一严重Bug,当数据库文件内容添加�时,其文件容量随之添加�,但当删除数据库内容时,其数据库容量不会对 ...

  6. android Camera拍照 及 MediaRecorder录像 预览图像差90度

    Camera拍照: 今天做照相机程序,结果写好了发现出问题了,预览的图像差90度.相关源代码如下: Camera.Parameters params = camera.getParameters(); ...

  7. android 66 sharedperference的使用

    package com.itheima.qqlogin; import java.io.BufferedReader; import java.io.File; import java.io.File ...

  8. telnet的使用

    1.要打开 telnet 不是内部或外部 命令 解决方案: 程序添加删除功能,添加即可 或法二 C:\WINDOWS\system32\telnet.exe (或用C:\WINDOWS\system3 ...

  9. Hibernate 配置派生属性

    在持久化类中,有些属性在表中没有对应的字段,可以在映射文件中设置派生属性. 比如在一个订单中有多个商品的价格,但没有计算总的价格,可以在持久化类中增添一个统计总价格的属性,在映射文件中配置一些信息. ...

  10. MFC/VC++ UI界面美化技术

    1.     工具: 1.1设备环境类: Windows下的绘图操作说到底就是DC操作.DC(Device Context设备环境)对象是一个抽象的作图环境,可能是对应屏幕,也可能是对应打印机或其它. ...