是否有可能从以基类为参数的实例化派生出以派生类为参数的所有模板实例化?
代码:
class Base{};
class Derived1 : Base{};
class Derived2 : Base{};
template<typename T>
class Templ /*: Templ<Base> if T derives from Base*/
{};怎么才能做到呢?
发布于 2014-07-31 13:39:03
对Templ<Base>进行专门化,然后使用SFINAE和std::is_base_of从Templ<Base>派生单独的专门化。
template<typename T, typename V = void>
class Templ
{};
template<>
class Templ<Base>
{};
template<bool B, typename R = void>
using enable_if_t = typename std::enable_if<B, R>::type;
template<typename T>
class Templ<T, enable_if_t<std::is_base_of<Base, T>::value>>
: public Templ<Base>
{};发布于 2014-07-31 13:44:01
这取决于你到底想做什么。如果你希望这只适用于某些特定的,已知的基础,它可以很容易地完成,例如在0x499602D2的答案。
然而,我解释您的问题的方式,您希望有一个模板,它是从实例化它的参数基类,无论是什么。这在标准c++ (尚未)中是不可能的,因为只有在从特定类派生的情况下,才能查询特定类型是从哪个类派生的。有关这方面的更多信息(以及未来可能的解决方案),请参阅this question。
https://stackoverflow.com/questions/25060065
复制相似问题