`
swimmer2000
  • 浏览: 37987 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

利用模板判断模板参数类型

阅读更多

C++中可以把数据类型当成参数,类型参数可以由编译器推导出来,也可以由程序员显式指定. 下面的两个模板,就可以用来判断模板的类型参数是否为reference或者const.

template <typename T> struct IsReference ///Use this struct to determine if a template type is a reference { enum { VALUE = 0 }; };

template <typename T> struct IsReference<T&> { enum { VALUE = 1 }; };

template <typename T> struct IsReference<const T&> { enum { VALUE = 1 }; };

template <typename T> struct IsConst ///Use this struct to determine if a template type is a const type { enum { VALUE = 0 }; };

template <typename T> struct IsConst<const T&> { enum { VALUE = 1 }; };

template <typename T> struct IsConst<const T> { enum { VALUE = 1 }; };

这两个模板函数(IsReference和IsConst)聪明的地方在于,编译器会根据模板参数的类型,选 择最贴近的模板类(struct)来实例化.

使用示例: template <typename T> void foo() { if (IsReferenc<T>.VALUE) { // 类型参数T为reference } if (IsConst<T>.VALUE) { // 类型参数为const } }

分享到:
评论

相关推荐

    function-模板选择器-公共参数.zip

    在WordPress开发中,模板选择器和公共参数是两个重要的概念,它们对于自定义...通过深入研究这个压缩包,开发者可以提升在WordPress开发中的技能,更好地利用模板选择器和公共参数来构建功能丰富的、用户友好的网站。

    c++模板元编程代码

    2. **类型级别的计算**:利用模板参数作为整数或枚举类型,可以在编译时进行算术运算和其他操作。 3. **类型级别的条件语句**:通过模板特化和SFINAE(Substitution Failure Is Not An Error)原则,可以实现编译时...

    C++模板元编程技术与应用 荣耀

    1. 类型推导:在模板中,类型通常不是直接指定的,而是由模板参数决定。编译器会根据传入的实参自动推导出模板实例化的具体类型。 2. 模板特化:当通用模板不能满足特定类型的需求时,可以为特定类型定义模板特化,...

    模板元编程概述

    在C++中,模板元编程(Template Meta-Programming,TMP)是一种利用模板实现元编程的方法。模板元编程并非有意设计,而是从泛型编程的实践中自然发展出来的,特别是与C++的模板机制相结合时。 模板元编程的本质是...

    gg模板解析_gg脚本模板_GG脚本_

    在"gg模板解析.lua"中,你可能会看到如何声明和使用这些数据类型的示例。 Lua的控制结构包括条件语句(if...then...else...end)、循环(while、for)和跳转语句(break、return)。在GG脚本中,这些结构用于实现...

    利用文本框判断wincc与PLC的连接状态

    本文将详细介绍如何利用WinCC中的文本框功能来实时判断上位机(WinCC运行所在的计算机)与下位机(如PLC)之间的通讯状态。 ### 一、背景介绍 #### WinCC简介 WinCC是基于Microsoft Windows操作系统的工业控制系统...

    深入学习与实践C++模板编程 值得学习

    模板元编程是一种利用模板进行编译时计算的技术,它允许开发者在编译阶段进行逻辑判断、循环等操作,生成高效的代码。例如,`std::enable_if`是模板元编程的一个常见应用,用于条件类型选择。 五、模板展开与编译期...

    c++模板元编程.ex.zip

    模板参数可以是类型参数和非类型参数,类型参数用于泛型编程,非类型参数则允许我们传入具体的值。 在C++模板元编程中,我们经常使用到的概念有类型推导、模板特化、SFINAE原则(Substitution Failure Is Not An ...

    C++模板元编程技术与应用

    元数据可以是模板参数,包括枚举、函数指针、全局对象引用等。虽然标准中没有提供编译期浮点数计算,但有一些实验性的探索。 书中后续章节涵盖了控制结构、数据结构、数值计算、类型计算、代码生成、断言和契约、库...

    应用MATLAB提取纳米模板特征几何参数.pdf

    然而,传统上判断模板质量的方法主要依赖于仪器图像的定性描述,这通常会导致较大的主观判断误差。 为此,作者提出了一种新的方法:利用MATLAB软件的图像处理和数据分析功能,定量分析纳米模板的SEM图像,以实现...

    用c++的类模板实现通用堆栈结构

    为了使用上述定义的模板类`Stack`,我们需要指定类型参数`T`和常量参数`n`的具体值。例如,若希望创建一个可以存放最多100个整数的栈,可以这样声明: ```cpp Stack, 100&gt; myStack; ``` #### 总结 通过上述示例...

    模板缓存的示例(Mirror)

    在镜像效果中,模板缓冲通常用来判断像素是否位于反射表面的后面,如果在后面,则不绘制,反之则绘制反射图像。 在这个示例中,按键可能对应着不同的视图或反射效果调整,例如: 1. 切换开启/关闭模板缓存,对比...

    Excel模板运用逻辑函数判断闰年.zip

    在这个“Excel模板运用逻辑函数判断闰年”的压缩包中,我们主要会探讨如何利用Excel的逻辑函数来实现这一功能。 Excel中的逻辑函数主要包括IF、AND、OR和NOT等,它们可以结合使用来完成复杂的条件判断。在这个案例...

    CodeSmith模板

    5. **预处理器指令**:CodeSmith提供了一系列预处理器指令,如`&lt;@include #&gt;`用于引入其他模板,`&lt;@parameter #&gt;`定义模板参数,`&lt;@if #&gt;`进行条件判断,使得模板编写更加灵活。 6. **生成器**:CodeSmith的生成器...

    利用jxls操作excel模板文件

    本篇文章将深入探讨如何利用Jxls库在Java中进行Excel模板文件的操作。 首先,我们需要了解Jxls的基本概念。Jxls是一个开源项目,它扩展了Apache POI库的功能,提供了一种声明式的方式来定义如何在Excel模板中填充...

    Joomla模板开发-模版是如何执行的

    1. **加载模板参数**:如果模板定义了特定的参数,这些参数会在模板执行之初被加载,允许开发者通过模板配置来改变网站的外观或行为。 2. **加载语言文件**:如果模板设定了特定的语言,相应的语言文件会被加载,...

    T4模板资料,快速建立T4模板

    T4指令用于控制模板的行为,包括但不限于模板的基本配置、参数传递等。 1. **模板指令**: ```xml ``` - **language**:指定输出语言,默认为C#。 - **debug**:启用调试模式,可能会导致Visual Studio性能...

    codesmith 模板

    通过配置文件,你可以指定连接字符串、表名等参数,然后运行codesmith,它将根据这些参数和模板生成相应的存储过程代码。 总结来说,codesmith 3层模板和存储过程生成功能是软件开发中的强大工具,能够显著提升开发...

    codesmith存储过程生成模板

    本文将深入探讨如何利用Codesmith创建存储过程生成模板,以及其在增删改查操作中的应用。 首先,理解Codesmith的核心功能至关重要。Codesmith提供了一种模板驱动的方式来生成代码,开发者可以通过定制模板来生成...

Global site tag (gtag.js) - Google Analytics