我有一个主要模板,我需要根据元功能进行专门化。通常的习惯就像
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占位符)我不允许更改它。什么是基于特征专门化它的最佳方法(就像我可以基于返回类型或附加参数主要用于函数模板那样)?
答案 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
。