非模板函数参数的C ++特征?

时间:2012-02-27 21:38:15

标签: c++ templates typetraits

在函数模板的定义中,模板参数的实例化通常是未知的。类型特征可用于在编译时获取某些信息。例如,这是一个简单的is_pointer

应用程序
template <typename T>
void foo(T p) { cout << is_pointer<T>::value << endl; }

我的问题是:在非模板函数中是否存在类似特征,编译时函数可以提供有用信息的情况?

2 个答案:

答案 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添加控制流,或者在使用不正确的类型时产生更好的错误。