使用enable_if"伪造"模板类方法专门化

Olu*_*ide 1 c++ templates sfinae enable-if

我想知道SFINAE原则/ enable_if是否可以用来"伪造"类模板方法的部分特化.例如,给定Foo其中Foo::bar定义了两个版本的类模板.如果T2 = int(例如)我想启用一个并禁用另一个,反之亦然.

template<typename T1, typename T2>
struct Foo
{
    void bar();
};

// Enable if T2 != int (disable otherwise)
template<typename T1, typename T2>
void Foo<T1,T2>::bar()
{
}

// Enable if T2 == int (disable otherwise)
template<typename T1, typename T2>
void Foo<T1,T2>::bar()
{
}
Run Code Online (Sandbox Code Playgroud)

PS:请提升enable_if首选.谢谢.

Ker*_* SB 5

[编辑.]您可以通过表示布尔值来产生不同的重载:

#include <type_traits>

template <typename T1, typename T2>
struct Foo
{
    void bar_impl(std::true_type);
    void bar_impl(std::false_type);

    void bar() { bar_impl(std::is_same<T2, int>()); }
};
Run Code Online (Sandbox Code Playgroud)