首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从template<derived>派生所有template<base>实例

从template<derived>派生所有template<base>实例
EN

Stack Overflow用户
提问于 2014-07-31 13:25:29
回答 2查看 132关注 0票数 3

是否有可能从以基类为参数的实例化派生出以派生类为参数的所有模板实例化?

代码:

代码语言:javascript
复制
class Base{};

class Derived1 : Base{};

class Derived2 : Base{};

template<typename T>
class Templ /*: Templ<Base> if T derives from Base*/ 
{};

怎么才能做到呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-31 13:39:03

Templ<Base>进行专门化,然后使用SFINAE和std::is_base_ofTempl<Base>派生单独的专门化。

代码语言:javascript
复制
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>
{};
票数 4
EN

Stack Overflow用户

发布于 2014-07-31 13:44:01

这取决于你到底想做什么。如果你希望这只适用于某些特定的,已知的基础,它可以很容易地完成,例如在0x499602D2的答案。

然而,我解释您的问题的方式,您希望有一个模板,它是从实例化它的参数基类,无论是什么。这在标准c++ (尚未)中是不可能的,因为只有在从特定类派生的情况下,才能查询特定类型是从哪个类派生的。有关这方面的更多信息(以及未来可能的解决方案),请参阅this question

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25060065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档