仅在c++ 11中为enable_if

Is enable_if only C++11?

本文关键字:if enable 中为 c++ 仅在      更新时间:2023-10-16

在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++标准中,还是有其他原因?

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; };

这只是使用模板元编程和SFINAE。

您也可以使用boost::enable_if而不是自己编写,这也是c++ 98/03兼容的