一.sizeof模板化

#include <stddef.h>
#include <iostream>template <typename T>
class TypeSize {public:static size_t const value = sizeof(T);
};int main()
{std::cout << "TypeSize<int>::value = "<< TypeSize<int>::value << std::endl;
}

二.获取容器元素类型

#include <vector>
#include <list>
#include <stack>
#include <iostream>
#include <typeinfo>template <typename T>
class ElementT;                    // primary templatetemplate <typename T>
class ElementT<std::vector<T> > {  // partial specializationpublic:typedef T Type;
};template <typename T>
class ElementT<std::list<T> > {    // partial specializationpublic:typedef T Type;
};template <typename T>
class ElementT<std::stack<T> > {   // partial specializationpublic:typedef T Type;
};template <typename T>
void print_element_type (T const & c)
{std::cout << "Container of "<< typeid(typename ElementT<T>::Type).name()<< " elements.\n";
}int main()
{std::stack<bool> s;print_element_type(s);
}

通过定义一个内部变量来简化上述工作

template <typename C>
class ElementT {
public: typedef typename C::value_type Type;
};

标准库都定义了这样的类型

std::cout << "Container of "<< typeid( std::stack<bool>::value_type).name()<< " elements.\n";

通过此方法来简化模板参数数量.

原先原型:

template <typename T, typename C>
T sum_of_elements (C const& c);

利用上面的内部type简化参数数量

template<typename C>
typename ElementT<C>::Type sum_of_elements (C const& c);

三.确定一个对象是否是类类型

参考:http://www.cnblogs.com/mightofcode/archive/2013/04/07/3005849.html

#include <iostream>template<typename T>
class IsClassT
{typedef char _One;typedef struct{char a[2];}_Two;template<typename T>static _One isClass(int T::* p);template<typename T>static _Two isClass(...);
public:enum { Yes = sizeof(isClass<T>(NULL))==sizeof(_One) };enum { No = !Yes };};class MyClass {
}; struct MyStruct {
}; union MyUnion {
}; void myfunc()
{
} enum{e1}e; // check by passing type as template argument
template <typename T>
void check()
{ if (IsClassT<T>::Yes) { std::cout << " IsClassT " << std::endl; } else { std::cout << " !IsClassT " << std::endl; }
}
template <typename C>
class ElementT {
public: typedef typename C::value_type Type;
};
// check by passing type as function call argument
template <typename T>
void checkT (T)
{ check<T>();
} int main()
{ std::cout << "int: "; check<int>(); std::cout << "MyClass: "; check<MyClass>(); std::cout << "MyStruct:"; MyStruct s; checkT(s); std::cout << "MyUnion: "; check<MyUnion>(); std::cout << "enum:    "; checkT(e); std::cout << "myfunc():"; checkT(myfunc);
} 

四.引用和限定符

incr 函数将会使apply模板函数演绎成T&& arg,需要注意这点

#include <iostream> template <typename T>
void apply (T& arg, void (*func)(T))
{ func(arg);
} void incr (int& a)
{ ++a;
} void print (int a)
{ std::cout << a << std::endl;
} int main()
{ int x=7; apply (x, print); //error//apply (x, incr);
} 

五.IfThenElse模板

用一个布尔值和特化技术来选择类型

template<bool C, typename Ta, typename Tb>
class IfThenElse; // partial specialization: true yields second argument
template<typename Ta, typename Tb>
class IfThenElse<true, Ta, Tb> {
public: typedef Ta ResultT;
}; // partial specialization: false yields third argument
template<typename Ta, typename Tb>
class IfThenElse<false, Ta, Tb> {
public: typedef Tb ResultT;
}; 

c++ template(10)类型函数相关推荐

  1. Template 基础篇-函数模板

    ====================================================|| 欢迎讨论技术的可以相互加微信:windgs (请备注csdn+xx职业) ======== ...

  2. cron表达式 每天0点10分和30分_“提前2小时下班”:学会这10个函数,办公效率提升了10倍!...

    ✎ 大家好,我是雅客. 今天给大家分享10个非常好用的函数,这几个函数都是我们精挑细选出来的,掌握这些函数,可以帮你提升10倍的工作效率,从此下班提前2个小时不是梦想! 01 VLOOKUP函数 根据 ...

  3. 巨蟒python全栈开发-第10天 函数进阶

    一.今日主要内容总览(重点) 1.动态传参(重点) *,** *: 形参:聚合 位置参数*=>元组 关键字**=>字典 实参:打散 列表,字符串,元组=>* 字典=>** 形参 ...

  4. C语言-第10章-函数

    文章目录 10.0 导入例子 10.1 函数基础 10.1.1 函数的定义.调用 10.1.2 定义和调用没有返回值的函数或者没有输入的函数 10.1.3 return语句 10.1.4 函数的嵌套调 ...

  5. oracle输入数字类型吗,PL/SQL Number数字类型函数

    PL/SQL Number数字类型函数 更新时间:2007年03月21日 00:00:00   作者: ABS(x) 函数,此函数用来返回一个数的绝对值. ACOS(x)函数,返回X的反余弦值.X范围 ...

  6. 8.10 exec函数

    8.10 exec函数 用fork函数创建子进程后,子进程往往要调用一种exec函数以执行另一个程序.当进程调用一种exec函数时,该进程完全由新程序代换,而新程序则从其m a i n函数开始执行.因 ...

  7. 【Kotlin】函数类型 ( 函数类型 | 带参数名称的参数列表 | 可空函数类型 | 复杂函数类型 | 带接收者函数类型 | 函数类型别名 | 函数类型实例化 | 函数调用 )

    文章目录 I . 函数类型 II . 带参数名的参数列表 III . 可空函数类型 IV . 复杂函数类型解读 V . 函数类型别名 VI . 带 接收者类型 的函数类型 VII . 函数类型实例化 ...

  8. 时间转化_Excel常见时间日期函数全讲解,10个函数教你如何进行日期转化

    在工作中我们经常会碰到一些需要转化或者计算时间日期的工作,这里就需要我们用到一些常见的Excel时间日期函数.今天我们就通过十个案例来教大家,如何在实际工作中对时间日期进行转化处理. 函数一.显示当前 ...

  9. (篇十)用结构体数组处理学生成绩、结构体类型函数求平均值

    文章目录 一.结构体变量 二.用结构体数组处理学生成绩 三.结构体类型函数求平均值 用C语言学好结构化编程逻辑!本篇主要分析结构体数组和结构体类型的函数,对于二级C语言来说,主要是考处理学生多个成绩上 ...

最新文章

  1. java qq音乐接口 api,QQ音乐解析API接口更新:支持HQ,ape,flac无损音质,缓存功能
  2. [C#.NET 拾遗补漏]09:数据标注与数据校验
  3. android4.0.3去掉底部状态栏statusbar,全屏显示示例代码
  4. 【Python】体育竞技分析
  5. 蚂蚁技术专家:一篇文章带你学习分布式事务
  6. 【Spring】Spring Security OAuth2 JWT 认证
  7. icmp协议_计算机网络基础(七)网络层ICMP协议
  8. 2492 上帝造题的七分钟 2
  9. 海马玩模拟器无法链接问题处理
  10. springboot+vue公务员考试信息管理系统java
  11. java 基础的数组 添加
  12. 商务统计_4 用图表演示数据 - 频数分布
  13. ff15测试软件翻译,最终幻想15数据详细分析 FF15详细的数值参数测试
  14. 每日一学 | 2021-05-18 | Power BI 学习笔记00、01、02
  15. 一文读懂Uniswap V2的改进与创新
  16. java古典兔子问题(java50道经典编程题)
  17. python读取微信群信息_利用Python转发微信群通知信息
  18. vue 和nodejs是什么关系?
  19. TFS淘宝分布式文件核心存储引擎源码架构剖析实现
  20. java实现rar格式,java解压缩文件的实现示例,支持rar和zip格式

热门文章

  1. spring中bean的细节之三种创建Bean对象的方式
  2. 数据库-第三范式及BCN
  3. 常见问题_数组索引越界异常
  4. 构建增强现实移动应用程序的六款顶级工具
  5. [CF475E]Strongly Connected City 2
  6. 第一个冲刺期的第九天
  7. 向linux内核加入系统调用新老内核比較
  8. enum to IEnumerableT
  9. ClickOnce部署(3):使用证书
  10. JadePool应用范例:创建China软件项目