`
ah_fu
  • 浏览: 227890 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

template中实现条件编译的补充:使用int2type技巧

 
阅读更多
    先贴代码:
#include <stdio.h>

template 
<int v>
struct Int2Type
...{
    
enum ...{ value = v };
}
;

void func(Int2Type<true>)
...{
    printf(
"true ");
}


void func(Int2Type<false>)
...{
    printf(
"false ");
}


template 
<bool value>
void func()
...{
    func(Int2Type
<value>());
}


int main()
...{
    func
<true>();
    func
<false>();
    
return 1;
}

    上一例子是在同一函数中实现条件编译,而本例是通过函数重载来实现条件编译。
 
分享到:
评论

相关推荐

    C++编译期计算.ppt

    在模板元编程中,可以使用模板参数和typedef名字来实现编译期计算。例如,以下代码实现了一个简单的If-Else语句: ```cpp template , typename T_true, typename T_false&gt; struct IfElse { typedef T_true Type...

    common_type:std 的实现

    在`common_type-master`这个压缩包文件中,可能包含了一个实现`std::common_type`功能的开源库,或者是一系列相关的示例代码,用于深入理解其工作原理和使用方法。通过研究这些代码,我们可以更深入地了解`std::...

    C++ TEMPLATE

    C++ 模板是编程语言中的一个重要特性,它允许程序员创建泛型代码,即能够处理多种数据类型的代码。模板在 C++ 中分为两种主要类型:函数模板和类模板。 1. **函数模板**: 函数模板是为编写能够处理不同类型参数的...

    cpp-C17不可变的编译时键值映射

    在C++编程中,编译时键值映射是一种能够在编译阶段进行数据映射的技术,这极大地提高了程序的效率和安全性。C++17引入了一些新的特性,使得实现不可变的编译时键值映射变得更加便捷。下面将详细讨论这个主题。 首先...

    变长参数 编译期类型识别技术

    在C++中,变长参数通常通过`...`(省略号)来表示,并且在编译期间,通过特定的技巧来识别和处理这些参数的类型。本篇文章将深入探讨如何利用函数模板递归实例化来实现编译期的变长参数类型识别。 首先,我们要理解...

    C++ 6.0 Template(模板库)参考手册.zip

    2. 使用`template`关键字显式模板实例化。 3. 避免模板的隐式多态,以减少编译时间和链接错误。 4. 考虑使用`using`声明简化模板使用,例如`using vec = std::vector&lt;int&gt;;`。 总结,C++ 6.0的模板库提供了一套强大...

    藏经阁-std__tuple与模板元编程.pdf

    std::tuple的声明方式为:`std::tuple&lt;type1, type2, ..., typeN&gt;`,其中`type1`, `type2`, ..., `typeN`是要存储的值的类型。 例如,下面的代码声明了一个std::tuple对象,包含一个整数、一个双精度浮点数和一个...

    C++template的实例

    std::cout &lt;&lt; "Type1: " (T).name() , Type2: " (U).name() &lt;&lt; std::endl; } ``` 这个函数在调用时如果不指定第二个类型,`U`将默认为`int`。 6. 模板元编程 模板元编程是一种在编译时进行计算的技术,利用模板来...

    A type safe SQL template library for C++.zip

    "A type safe SQL template library for C++" 提供了这样的功能,使得开发人员可以在C++代码中方便地操作数据库,同时避免常见的SQL注入等安全问题。 该库的核心思想是利用模板元编程技术,将SQL语句的构建与执行...

    C++Templates.zip

    C++ Templates 是C++编程语言中的一个重要特性,它允许开发者创建泛型代码,实现代码的重用和灵活性。模板在C++中分为两种主要类型:函数模板和类模板。它们都提供了一种方法来定义通用的功能,使得在处理不同类型的...

    一个c++ 参数模版映射的例子

    模板元编程(Template Meta Programming,TMP)是C++模板功能的延伸,它允许在编译时进行计算。`TestTemplate`可能利用了模板元编程技术,比如为了确保`Key`类型支持某种操作,或者为了优化特定类型的数据处理。 ...

    C++函数重载•函数模板•类模板.doc

    这种机制可以让我们使用相同的函数名来实现不同的功能。 函数重载的规则是:编译器根据实参和形参的类型及个数的最佳匹配来选择调用哪个函数。例如: int add(int x, int y); int add(int x, int y, int z); 在...

    An Idiot's Guide to C++ Templates

    非类型模板参数允许在模板中使用整型数值或枚举值: ```cpp template &lt;int N&gt; class NonTypeTemplateClass { public: void Print() const { std::cout &lt;&lt; "N: " &lt;&lt; N &lt;&lt; std::endl; } }; // 使用示例 ...

    C++ Templates 中文版.rar

    例如,`std::enable_if` 可以在编译期根据条件决定函数是否可用。 7. **SFINAE原则(Substitution Failure Is Not An Error)**: - 在模板实例化过程中,如果替换失败,不会导致编译错误,而是简单地忽略该模板。...

    C++模板元编程

    这种技术在模板元编程中非常常见,用于实现编译时的递归算法。例如,下面是一个计算阶乘的示例: ```cpp template &lt;int N&gt; struct Factorial { enum { value = N * Factorial&lt;N - 1&gt;::value }; }; template ...

    c++ templates 全览(侯捷)

    - **类型函数(Type Functions)**:通过模板实现的函数,返回值是类型。 **3. 底层运作:** - **模板参数推导(Template Argument Deduction)**:编译器自动确定模板参数的过程。 - **模板重载解析(Template Overload...

    模板函数和模板类的编程应用

    // 使用示例:max&lt;int, double&gt;::type 会是double ``` ### 非类型模板参数 除了类型参数外,模板还可以接受非类型参数,如整数或枚举值。这可以用于实现基于参数值的算法变体: ```cpp template &lt;int N&gt; void ...

    c++设计新思维的实验程序

    最后,`Type2Type.cpp`可能与`Int2Type`类似,是将某种类型信息转化为另一种类型,常用于类型安全的编程模式。 这些实验程序覆盖了C++设计新思维中的核心概念,如模板元编程、类型系统操作和编译时计算。通过深入...

    C++ Templates 源码 (官方源码离线完整版)

    - 使用模板作为编程工具,允许在编译时进行计算,例如,`std::enable_if`用来根据类型条件启用或禁用函数模板。 6. **SFINAE原则(Substitution Failure Is Not An Error)**: - 在模板选择过程中,如果替换模板...

Global site tag (gtag.js) - Google Analytics