C++ 如何用自己的类型实例化超类模板?

C++ 如何用自己的类型实例化超类模板?,c++,templates,inheritance,C++,Templates,Inheritance,我有很多类A,除了它们的数据结构之外,它们非常相似,所以我想把普通的东西移到一个基本模板B中。问题是模板参数是继承类的一部分,所以它在我需要将它传递给模板的点之后出现。如何在不将X移出A(试图保持封装)的情况下实现这一点 模板 B类{ int函数(xa); }; A类:公共B类{ 公众: 结构X{//在每个类中都不同 int x; }; }; 注意:由于架构的原因,A的“成员”需要委托给一个中心容器,所以我需要这个子结构。是的,我知道,我也不喜欢,但这是无法改变的 这是无法完成的,因为在实例化

我有很多类A,除了它们的数据结构之外,它们非常相似,所以我想把普通的东西移到一个基本模板B中。问题是模板参数是继承类的一部分,所以它在我需要将它传递给模板的点之后出现。如何在不将X移出A(试图保持封装)的情况下实现这一点

模板
B类{
int函数(xa);
};
A类:公共B类{
公众:
结构X{//在每个类中都不同
int x;
};
};

注意:由于架构的原因,A的“成员”需要委托给一个中心容器,所以我需要这个子结构。是的,我知道,我也不喜欢,但这是无法改变的

这是无法完成的,因为在实例化基时,类型仍然不完整,并且嵌套类型没有定义。你想解决的问题是什么?可能有比您尝试的更简单的解决方案。

如果
X
A
中是公共的,您要封装什么?如果
X
是公共的,则将其移动到
A
之外,并使用不同的结构简单地使用
B
。不需要继承就可以使事情复杂化。我理解封装是把属于自己的东西放在一起,而不是隐藏某些东西。类A是生成的,80%相同。许多方法都不关心X中的内容,因此它们可以很好地适合基类。这同样适用于将X的存储委托给中央容器的机制。您可以更改代码生成工具以在其他地方生成嵌套类型吗?我可以,但在我之外定义自己的结构似乎有点脏。这就是我所说的封装。@Daniel:设计就是找到折衷办法来适应需要和工具。您可以做不同的事情,例如,可以进行不同的封装(有一个外部类/名称空间,其中这两个是嵌套类),您可以提供嵌套类型作为trait类的嵌套类型。。。您不能做的是问题中的代码,因为语言不允许这样做。请注意,您所称的封装并不是通常所称的封装,在更改定义时,您可能使用了含义错误的常识短语
template<class X>
class B {
    int somefunction( X a );
};

class A : public B<X> {
  public:
    struct X { // different in each class A
        int x;
    };
};