我想知道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()
{
}
PS:请启用enable_if首选。感谢。
答案 0 :(得分: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>()); }
};