元函数
定义: 无副作用的映射或变换,即在输入相同的情况下,多次调用同一个函数,得到的结果也是相同的。
运行: 编译期运行。在编译阶段,编译器只能构造常量作为中间结果。
类型元函数
template <typename T>
struct Fun_ { using type = T; };
template <>
struct Fun_<int> { using type = unsigned int; };
int main()
{
Fun_<int>::type h = 3;
return 0;
}
对应汇编代码为:
这里Fun_是一个元函数,具有以下性质:
- 输入类型T,以模板参数的形式传递到Fun_模板中;
- 输出为模板的内部类型type, 即Fun_<T>::type;
- 通过模板特化实现映射转换
如果放宽条件,不要求输入输出均为类型等条件,我们可以得到元函数:
template <typename T>
using Fun = typename Fun_<T>::type;
Fun<int> h = 3;
其汇编代码为: