如何基于布尔元函数专门化类模板?

时间:2014-02-05 12:31:56

标签: c++ templates c++11 sfinae

我有一个主要模板,我需要根据元功能进行专门化。通常的习惯就像

 template<class T,class E = void>
 struct foo { };
 template<class T>
 struct foo<T,std::enable_if_t<is_xxx<T>{}> > {};

但是,我遇到主模板写为

的情况
template<class T>
 struct foo { };

(即没有额外的SFINAE占位符)我不允许更改它。什么是基于特征专门化它的最佳方法(就像我可以基于返回类型或附加参数主要用于函数模板那样)?

1 个答案:

答案 0 :(得分:1)

您可以添加基类:

template<class T, class E = void>
struct foo_base { };

template<class T>
struct foo : foo_base<T, std::enable_if_t<is_xxx<T>{}>> { };

然后,您将foo的所有成员移至foo_base