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

 #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. in和exists的区别与SQL执行效率分析

    可总结为:当子查询表比主查询表大时,用Exists:当子查询表比主查询表小时,用in SQL中in可以分为三类: 1.形如select * from t1 where f1 in ('a','b'), ...

  2. switch语法中break,default作用说明

    转自:http://cjhbest999.iteye.com/blog/1137124 关于java中switch使用的一些说明 switch(表达式) { case 常量表达式1:语句1; .... ...

  3. 【JAVA - SSM】之MyBatis与原生JDBC、Hibernate访问数据库的比较

    首先来看一下原生JDBC访问数据库的代码: public static void main(String[] args) { // 数据库连接 Connection connection = null ...

  4. Request To JavaBean(请求对象转换为JavaBean对象)

    背景: 经常要从request等对象取出值来赋入bean中,如果不用MVC框架的绑定功能的话,麻烦  一 参考资料 1 http://jc-dreaming.iteye.com/blog/563893 ...

  5. sql server和my sql 命令(语句)的差别,sql server与mysql的比較

    sql与mysql的比較 1.连接字符串 sql  :Initial Catalog(database)=x;  --数据库名称       Data Source(source)=x;        ...

  6. android 69 SQLite数据库

    package com.itheima.sqlitedatabase; import java.sql.ResultSet; import android.content.Context; impor ...

  7. XC应用系列作品(Android应用)

    XC系列应用,如真题园手机客户端1.1等应用已经分别在 360手机助手.腾讯应用宝.百度手机助手.小米应用商店.豌豆荚.应用汇.木蚂蚁等安卓市场平台上线了! 本页面的系列应用是本人的开发的一Andro ...

  8. Android(java)学习笔记182:保存数据到SD卡 (附加:保存数据到内存)

    1. 如果我们要想读写数据到SD卡中,首先必须知道SD的路径: File file = new File(Environment.getExternalStorageDirectory()," ...

  9. MDA系统分析实战--图书馆管理系统

    MDA系统分析实战--图书馆管理系统 本文通过MDA系统分析方法,对图书馆管理系统进行分析,简要叙述系统分析的一般过程.首先,简要介绍什么是MDA:MDA(Model-Driven Architect ...

  10. JDK自带方法实现RSA非对称加密

    package jdbc.pro.lin; import java.security.InvalidKeyException; import java.security.Key; import jav ...