在 C++ 参考文档网站搜索 enable_if,它被称为只是一个 C++11 的特性。
然而,我使用 GCC 编译器在 C++98 版本上编译了自己的 enable_if 版本,它完美地工作,并似乎可以在任何版本的 C++ 上使用(输出值为 1):
#include <iostream>
namespace egg
{
template<bool B,
typename T = void>
struct enable_if
{
};
template<typename T>
struct enable_if<true, T>
{
typedef T type;
};
}
int main()
{
egg::enable_if<1 == 1, int>::type x = 1;
std::cout << x << std::endl;
}
我这样说是否正确:enable_if 实际上是任何 C++ 版本都支持的功能,但只是在 C++ 标准中引入了它,还是有其他原因呢?
enable_if
和其他模板元编程/类型特征API(http://en.cppreference.com/w/cpp/header/type_traits)不需要任何编译器魔法/实现,因此如果您设法制作自己的API,它将在您使用的任何C++版本中工作。除了像`is_move_constructible`这样的API,它需要C++11的移动构造函数和R-Value引用。 - Brandonstd::enable_if_t
代替typename std::enable_if<>::type
。其他type_trait
也是如此。 - Alejandro