gpt4 book ai didi

c++ - C++中如何继承模板类?

转载 作者:行者123 更新时间:2023-11-30 01:41:41 28 4
gpt4 key购买 nike

我是 Java 专家,我尝试在类模板上编写 inheritince,但我遇到了很多错误,例如:模板特化需要“模板<>”或类模板“数组”的使用需要模板参数。你们能帮我纠正我在代码或思维方式上的错误吗?我有这样的类(class):

template <typename T>

class array {
public:
virtual void randomFunction() = 0;

protected:
T* values;
int size; // number of values
};

这里是intArray.h

class intArray: public array<int>{
public:
intArray();
void randomFunction();
private:
};

这里是intArray.cpp

intArray::intArray() {
this->size = 1;
this->values = new int[1];
}

void intArray::randomFunction() {
this->values[0] = 5;
}

我想要的是像这样迭代这些对象:

int main() {
vector<array> arrayList;
arrayList.push_back(intArray());
arrayList.push_back(doubleArray());
arrayList.push_back(stringArray());

anotherFunction(&arrayList);
}

void anotherFunction(vector<array> *list) {
for(array a: (*list)) {
a.randomFunction();
}
}

最佳答案

由于您的 array是一个类模板,这个vector<array>不是有效的类型定义。作为std::vector需要一个类型参数。

如果您希望完成类型删除,则需要您的类模板本身继承自一个基类:

class array_base {
virtual void randomFunction() = 0;
virtual ~array_base();
};

template <typename T>
class array : public array_base {
// As before
};

这还不够,因为 C++ 不是 Java。我们处理对象,并以多态方式处理它们,我们需要显式使用(智能)指针或引用。

牢记这一点,您的 vector现在应该变成这样:

std:vector<std::unique_ptr<array_base>> arrayList;
arrayList.emplace_back(std::make_unique<intArray>());

关于c++ - C++中如何继承模板类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40958747/

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