加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 使用嵌套类继承模板类

发布时间:2020-12-16 09:21:25 所属栏目:百科 来源:网络整理
导读:我想创建一个继承自模板类A的类B.我希望B的嵌套类E成为此继承中的模板参数.更直观: template class Tclass A {}class B : public AB::E { class E { int x; }}class C : public AC::E { class E { int x; int y; }} 我认为问题是编译器在处理B的声明时不知
我想创建一个继承自模板类A的类B.我希望B的嵌套类E成为此继承中的模板参数.更直观:

template <class T>
class A {
}

class B : public A<B::E> {
    class E {
        int x;
    }
}

class C : public A<C::E> {
    class E {
        int x;
        int y;
    }
}

我认为问题是编译器在处理B的声明时不知道B类将具有嵌套类E,因为我收到错误:

no member named ‘E’ in ‘B’

我已经看过这个similar question,但我想确认在放弃这种方法之前没有直接解决这个冲突的方法.

谢谢!

解决方法

我不认为它可以直接完成.

一个明显的方法是在某些其他命名空间中定义B :: E和C :: E(至少使它们不在全局命名空间中),然后在“父”类中使用它们:

template <class T>
class A { /* ... */ };

namespace B_detail {
    class E { /* … */ };
}

class B : public A<B_detail::E> { /* ... */ };

namespace C_detail {
    class E { /* ... */ };
}

class C : public A<C_detail::E> { /* ... */ };

根据具体情况,您还需要/想要宣布* _detail :: E是B / C的朋友.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读