首页 > 解决方案 > 使用嵌套类继承模板类

问题描述

我想创建一个继承自模板类 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,因为我收到了错误:

“B”中没有名为“E”的成员

我见过这个类似的问题,但我想确认在放弃这种方法之前没有直接解决这个冲突的方法。

谢谢!

标签: c++templatesinheritanceinner-classes

解决方案


我能想到的最接近的事情是使用基类。

template <class T>
class A {
};

class B; // forward declaration of ::B
namespace detail { 
class B { 
    friend class ::B;
    class E {
        int x;
    };
};
} /* namespace detail */

class B : public A<detail::B::E> {
};

推荐阅读