非模板函数参数的C++特性

C++ traits for non-template function parameters?

本文关键字:C++ 特性 参数 函数      更新时间:2023-10-16

在函数模板的定义中,模板参数的实例化通常是未知的。类型特征可以用于在编译时获得一些信息。例如,这里有一个is_pointer:的琐碎应用

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

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

是:

#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等)也可以实现同样的效果

除非检查关于基本类型的编译时信息,比如整型的最大值和最小值或其他什么。

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