gpt4 book ai didi

c++ - 通知创建指向类 B1 或 B2 或 B3 的特定实例的指针类 A

转载 作者:太空宇宙 更新时间:2023-11-04 16:04:34 25 4
gpt4 key购买 nike

给定:

class Propulsion () {}; //abstract
class GenericDualMotor : public Propulsion {}; // also abstract
class Motor1 : public GenericDualMotor () {}; // Concrete
class Motor2 : public GenericDualMotor () {}; // Concrete
class Motor3 : public GenericDualMotor () {}; // Concrete

class Dispatcher { // concrete but not a descendant of Propulsion
public:
template<class T>
T *_motor;
Dispatcher(T motor) : _motor(motor){};

void forward() {
_motor->forward();
}
};

“前进”方法在 Propulsion 中声明为:

virtual void forward(int speed) = 0; // abstract

但是在每个 Motor 类中,它被声明为具体的:

void forward(int speed) {
// motor-specific code here...
}

在 Main 中,我声明:

Motor1 motor();
Dispatcher dispatcher(&motor);

编译失败,提示:“错误:数据成员‘_motor’不能是成员模板”

我想做的是在编译时决定正在使用哪种电机类型,并且能够在不更改 Dispatcher 或 GenericDualMotor 类代码的情况下添加新的电机类型。我怀疑模板是在这里使用的正确机制,但我仍然没有完全“理解”模板。我想这是一个简单的代码修复。预先感谢您的帮助。

最佳答案

您不需要模板 - 这就是拥有 virtual 函数的意义所在。只需:

class Dispatcher { // concrete but not a descendant of Propulsion
public:
Propulsion* _motor;
Dispatcher(Propulsion* motor) : _motor(motor){};

void forward(int speed) {
_motor->forward(speed);
}
};

这将适用于继承自Propulsion 的任何东西,包括您所有的Motor

关于c++ - 通知创建指向类 B1 或 B2 或 B3 的特定实例的指针类 A,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37823564/

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