【发布时间】:2012-08-05 06:25:22
【问题描述】:
这就是我想要实现的。叶组件会继承Component<ParentT>,其他的会继承Component<ParentT, ChildT>
template <typename T>
class Component{
protected:
typedef Component<T> ParentComponentT;
...
};
template <typename ParentT, typename ChildT>
class Component: public Component<ParentT>{
protected:
typedef std::vector<ChildT*> CollectionT;
...
};
但问题是模板参数被重新声明。而且我不能将第二个移到第一个之上,因为第二个继承了第一个。
错误:使用 2 个模板参数重新声明
注意:之前的声明“模板类组件”使用了 1 个模板参数
【问题讨论】:
-
暂时忽略可变参数模板,模板有固定数量的参数;单个
Component<>不能同时具有一个和两个参数。这看起来很像XY problem——你实际上想要完成什么? -
那么建模的好方法是什么?
Component <T, void>? -
这取决于 - 为什么你希望 base 和 child 具有相同的名称?给他们不同的类型名称,你没有问题。
-
是的,差不多(虽然如果你说为什么你不想给他们不同的名字可能会有所帮助,这会有所帮助;再次,XY问题)。跨度>
-
@Johan :我从来没有说过——你仍然有两个模板参数,不管你是否指定两者。