所以我试图填充从模板类继承的类的自定义集合,如此
template<typename T>
class Parent {
public:
T value;
Parent(T val) {value = val;}
}
class ChildA : Parent<int> {
...
}
class ChildB : Parent<double> {
...
}
// ==== Collections ====
template<typename cT>
class ParentCollection {
public:
cT list[10];
}
class ACollection : ParentCollection<ChildA> {
...
}
class BCollection : ParentCollection<ChildB> {
...
}
所以我想在ParentCollection中添加一个函数,它允许我生成列表数组并添加一个新的cT类型。这应该由孩子们继承。如果我要在ACollection或BCollection中写这个,那就像是:
void ACollection::Add(int val) {...}
或
void BCollection::Add(double val) {...}
分别。但是,由于这两者都做了完全相同的事情,除了生成不同的Childrens之外,我想在ParentCollection中写这个,但我无法弄清楚如何做以下事情:
void ParentCollection::Add(T val) {...}
也就是说,在ParentCollection的parms中使用Parent类模板中的T类型。这样的事情可能吗?或者我必须为两个子集合分别编写添加函数。
答案 0 :(得分:3)
通常,公开模板参数是一个好主意,因为由于C ++没有反射功能,否则在类本身之外获取它们会很麻烦:
// inside parent class
using value_type = T;
然后,您可以引用此typedef来指定您的成员函数签名:
void Add(typename cT::value_type val)
答案 1 :(得分:1)
您可以在父类中键入def T类型,然后在派生类中使用它:
current_company
解决此问题的具体说明: