在C++参考网站上查看enable_if,据说它只是一个C++ 11特性.
但是,我使用C++ 98类型的GCC编译器编译了我自己的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;
}
Run Code Online (Sandbox Code Playgroud)
我是否正确地说,enable_if实际上是任何C++版本的一个功能,但只是引入了C++标准,还是有其他原因?
enable_if被添加到C++ 11(源代码)的标准中.它不依赖于任何C++ 11标准功能,所以它代码可以在C++ 03中自己编码,你可以从这个可能的实现中看到
template<bool B, class T = void>
struct enable_if {};
template<class T>
struct enable_if<true, T> { typedef T type; };
Run Code Online (Sandbox Code Playgroud)
您也可以使用boost::enable_if自己编写的,而不是C++ 98/03兼容.