c ++ enable_if-SFINAE

问题描述 投票:0回答:2

[我试图理解std::enable_ifcppreference.com有一个示例,这种使用比函数重载有什么好处?下面的代码部分正在做同样的事情。

struct T {
    enum { int_t,float_t } m_type;
    template <typename Integer,
              std::enable_if_t<std::is_integral<Integer>::value, int> = 0

    T(Integer) : m_type(int_t) {}

    template <typename Floating,
              std::enable_if_t<std::is_floating_point<Floating>::value, int> = 0

    T(Floating) : m_type(float_t) {} // OK
};

与构造函数重载相同]

struct T1 {
        enum { int_t, float_t } m_type;
        T1(int) :m_type(int_t)
        {
            cout << "int ctor" << endl;
        }

        T1(float) :m_type(float_t)
        {
            cout << "float ctor" << endl;
        }
    };

我试图理解enable_if,cppreference.com上有一个示例,这种使用比函数重载有什么好处?下面的代码部分正在做同样的事情。结构T {枚举{...

c++ sfinae enable-if
2个回答
1
投票

您的两个示例不相同。对于第一个示例,该类将排除任何整数或浮点类型exactly


0
投票

在这种情况下,实际上并没有真正的优势,因为整数类型会转换为例如int首先,然后将调用正确的重载构造函数。

© www.soinside.com 2019 - 2024. All rights reserved.