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


前面已经介绍过了,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 模板元编程 - 基础类型和元函数)