gpt4 book ai didi

c++ - 从继承类 C++ 获取模板类型

转载 作者:太空宇宙 更新时间:2023-11-04 15:58:45 26 4
gpt4 key购买 nike

所以我正在尝试填充从模板类继承的类的自定义集合,就像这样

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 类型并将其添加到列表数组中。这应该由 children 继承。如果我在 ACollection 或 BCollection 中写这个,它会是这样的:

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

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

分别。但是,由于除了生成不同的子项外,它们都做完全相同的事情,所以我想将其写在 ParentCollection 中,但我不知道如何做类似的事情:

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

也就是说,在 ParentCollection 的参数中使用来自 Parent 类模板的 T 类型。这样的事情可能吗?或者我必须为两个子集合分别编写添加函数。

最佳答案

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

// inside parent class
using value_type = T;

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

void Add(typename cT::value_type val)

关于c++ - 从继承类 C++ 获取模板类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49599365/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com