简体   繁体   中英

How to specialize class template based on boolean metafunction?

I have a primary template, which I need to specialize based on based on a meta-function. The usual idiom is like

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

However, I have a situation where the primary template is written as

template<class T>
 struct foo { };

(ie without that extra SFINAE placeholder) and I am not allowed to change it. What is the best way to specialize it based on a trait( like I can do that mostly for function template based on return type or additional argument)?

You can add a base class:

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

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

Then you move any members of foo into foo_base .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM