美文网首页
C++11 模板元编程 - 基础类型和元函数

C++11 模板元编程 - 基础类型和元函数

作者: MagicBowen | 来源:发表于2016-09-16 10:41 被阅读344次

前面已经介绍过了,TLP库中通过IntType和BoolType对int和bool值进行封装,并且提供了对应的计算元函数。

TLP中定义了如下IntType的基本运算元函数:

  • __int() :输入一个常整数,返回一个对应的IntType类型;

  • __inc() : 递增运算。例如 __inc(__int(5))的结果是__int(6);

  • __dec() : 递减运算。例如 __dec(__int(5))的结果是__int(4);

  • __add() : 加法运算。例如 __add(__int(5), __int(2))的结果是__int(7);

  • __sub() : 减法运算。例如 __sub(__int(5), __int(2))的结果是__int(3);

  • __mul() : 乘法运算。例如 __mul(__int(5), __int(2))的结果是__int(10);

  • __div() : 除法运算。例如 __div(__int(5), __int(2))的结果是__int(2);

  • __mod() : 取模运算。例如 __mod(__int(5), __int(2))的结果是__int(1);

  • __sum() : 求和运算,输入元素不定长。例如 __sum(__int(0), __int(1), __int(2))

同样,对于BoolType我们定义如下元函数:

  • __bool():输入一个bool值,返回一个BoolType类型;

  • __true():等价于__bool(true);

  • __false():等价于__bool(false);

  • __not():取非操作。例如:__not(__bool(true))的结果是__false()

  • __and():逻辑与操作。例如:__and(__true(), __false())的结果是__false()

  • __or():逻辑或操作。例如:__or(__true(), __false())的结果是__true()

TLP同样提供了如下辅助元函数:

  • __is_eq():判断两个类型是否相等,返回一个BoolType。

  • __if():根据第一个入参BoolType的值,选择返回第二和第三个类型中的一个。如果如果为__true(),则返回第二个参数对应的类型,否则返回第三个参数对应的类型。

  • __value():对类型进行求值。对于IntType和BoolType其值就是对应内部的Value值。

  • __print():通过编译器告警打印出入参的类型值。

此外,TLP中有两个特殊类型,

  • NullType:用于各种计算中返回的无效值;可以使用宏__null()替代;

  • EmptyType:空类,大多数用于占桩;可以使用宏__empty()替代;

NullTypeEmptyType分别调用__value()元函数,将会返回0xFFFFFFFF0x0

最后,TLP提供了一个元函数,用于判断表达式的返回值是否有效:

  • __valid():用于判断参数中的返回值类型是否有效。默认只对NullType认为是无效的。

元函数转发

返回 C++11模板元编程 - 目录

相关文章

  • C++11 模板元编程 - 两阶段的C++语言

    前面我们介绍了C++模板元编程的基础知识。我们将模板元编程的计算对象统一到类型上,引入了元函数的概念。元函数是模板...

  • C++11 模板元编程 - 基础类型和元函数

    前面已经介绍过了,TLP库中通过IntType和BoolType对int和bool值进行封装,并且提供了对应的计算...

  • C++11 模板元编程 - 元函数

    我们继续演进前面那个无聊的类型计算的例子,来得出元函数的定义。 前面我们实现了PointerOf,它对于传进的任意...

  • C++11 模板元编程 - 元函数转发

    前面介绍了元函数转发的概念,也就是通过已有的元函数组合,来定义新的元函数。 如下我们实现一个元函数TypeSize...

  • 模板元编程

    什么是模板元 模板元编程是一种编译期计算的编程方法。如果你学过任意一门函数式的编程语言,那么你对模板元编程的理解一...

  • C++11 模板元编程 - 元编程

    从本节开始我们将模板元编程当做一门独立的函数式语言来讨论它的方方面面。 所谓元编程,就是指可以产生程序的程序。由于...

  • C++11 模板元编程 - 类型校验

    一般情况下一个系统可以发送和接收的消息是确定的。例如前面的例子中,visitor可以发送AccessReq消息,可...

  • C++11 模板元编程 - 类型萃取

    类型萃取(trait)的概念我们前面有介绍过。可以将trait看做是一种静态反射技术,通过trait我们可以自动提...

  • C++11 模板元编程 - 类型选择

    上面我们在send的函数实现中创建了一个msg,它的内存是在函数栈空间上临时申请的。一般系统间发送的消息可能会比较...

  • C++11 模板元编程 - 类型操纵

    本文最开始介绍模板元编程的时候说过,模板元编程是写C++框架离不开的技术。本例将通过介绍模板元编程在dates框架...

网友评论

      本文标题:C++11 模板元编程 - 基础类型和元函数

      本文链接:https://www.haomeiwen.com/subject/vxfiettx.html