在函数模板的定义中,模板参数的实例化通常是未知的。类型特征可用于在编译时获取某些信息。例如,这是一个简单的is_pointer
:
template <typename T>
void foo(T p) { cout << is_pointer<T>::value << endl; }
我的问题是:在非模板函数中是否存在类似特征,编译时函数可以提供有用信息的情况?
答案 0 :(得分:4)
是:
#include <iostream>
#include <limits>
int main()
{
std::cout << "Max value of an int on your platform is "
<< std::numeric_limits<int>::max() << "\n";
}
这是我想到的第一个例子。我相信还有很多其他人。更一般地说,它允许键入类型的编译时“查找”。显然,在非模板情况下,使用宏定义(INT_MAX
等)可以实现相同的目的。
答案 1 :(得分:0)
除非检查有关基本类型的编译时信息,例如整数类型的最大值和最小值等等。
类型特征的真正好处是帮助模板元编程,或者通过使用sfinae添加控制流,或者在使用不正确的类型时产生更好的错误。