2012-02-27 48 views
0

在函数模板的定义中,模板参数的实例通常是未知的。类型特征可以用来在编译时获得一些信息。例如,这里是is_pointer一个简单的应用:非模板函数参数的C++特征?

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

我的问题是:是否有过一个情况,在非模板功能,其中性状样,编译时功能可以提供有用信息?

+0

你想了解一个你已经知道的类型,你想知道什么? – perreal 2012-02-27 21:40:46

+0

@perreal:查看我的答案。 – 2012-02-27 21:44:06

回答

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等)也可以实现。

+0

感谢奥利,这是一个有趣的答案。我会测试你的耐心,说我实际上正在寻找一种情况,给定一个函数,用一个参数类型用词汇表示“X”,根据提供的参数,有一些关于“X”的内容会有所不同。 (我认为答案可能不是,但我不确定。) – user2023370 2012-02-27 22:21:02

+0

好的,我放弃了。我的问题措辞不佳。你提供的是“有用的信息”。就我以前的评论而言,我认为答案是否定的。 – user2023370 2012-02-28 10:22:59

+0

@ user643722:哦,对不起,我错过了你以前的评论。我想你问的问题是“特征能根据运行时间信息做任何事情吗?”,在这种情况下答案是否定的。 – 2012-02-28 10:42:08

0

除非检查有关基本类型的编译时间信息,如整数类型的最大值和最小值等。

类型特征的真正好处是通过将控制流与sfinae相加来帮助模板元编程,或者在使用错误类型时产生更好的错误。