在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;
}
我是否正确地说,enable_if实际上是任何C ++版本的功能,但只是引入了C ++标准,还是有其他原因?
答案 0 :(得分:5)
enable_if
被添加到C ++ 11(source)中的标准中。它不依赖于任何C ++ 11标准功能,所以它代码可以在C ++ 03中自己编码,正如您可以从这种可能的实现中看到的那样
template<bool B, class T = void>
struct enable_if {};
template<class T>
struct enable_if<true, T> { typedef T type; };
这只是使用template metaprograming和SFINAE。
您也可以使用boost::enable_if
而不是自己编写C ++ 98/03兼容的文件。