从继承的类C ++获取模板类型

埃里克·陈1248

因此,我试图填充从模板类继承的类的自定义集合,如下所示

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类型的list数组。这应该由孩子们继承。如果我要用ACollection或BCollection编写此代码,它将类似于:

void ACollection::Add(int val) {...}

要么

void BCollection::Add(double val) {...}

分别。但是,由于除了生成不同的Childrens之外,它们都做完全相同的事情,因此我想在ParentCollection中编写此代码,但是我不知道如何做类似的事情:

void ParentCollection::Add(T val) {...}

也就是说,使用ParentCollection的parms中的Parent类模板中的T类型。这样的事情可能吗?还是必须为两个子集合分别编写add函数。

丹尼尔·戴

通常,公开模板参数是一个好主意,因为C ++没有反射功能,否则在类本身之外获取它们就很麻烦:

// inside parent class
using value_type = T;

然后,您可以引用此typedef来指定您的成员函数签名:

void Add(typename cT::value_type val)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章