gpt4 book ai didi

c++ - 如何子类化模板化基类?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:04:44 26 4
gpt4 key购买 nike

我有以下数据结构:

struct fastEngine { ... }
struct slowEngine { ... }

template<typename T>
class Car {
T engine;
vector<T> backupEngines;

virtual void drive() = 0;
}

class FastCar : public Car<fastEngine> {
virtual void drive() {
// use the values of "engine" in some way
}
}

class SlowCar : public Car<slowEngine> {
virtual void drive() {
// use the values of "engine" in some way
}
}

Car* getCarFromCarFactory() { // 1
if (randomNumber == 0)
return new FastCar();
else
return new SlowCar();
}

void main() {
Car* myCar = getCarFromCarFactory(); // 2
myCar->drive();
}

编译器在位置 1 和 2 处报错,因为它要求我用模板参数定义 Car*。我不关心我使用的是什么模板版本的 Car,我只想要一个指向我可以驾驶的 Car 的指针。 engine 结构必须是结构,因为它们来自现有代码,我无法控制它们。

最佳答案

您可以创建一个非模板化的基类 Car<T>继承,例如

struct ICar {
virtual void drive() = 0;
};

template <typename T>
class Car : public ICar {
// ...
}

int main() { // BTW, it's always `int main`, not `void main`
ICar *myCar = getCarFromCarFactory();
myCar->drive();
}

关于c++ - 如何子类化模板化基类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1479498/

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