c++ - 在扩展已知类的未知类中调用函数
问题描述
正如标题所说,我有以下用户可以扩展的“基”类:
class BaseScene
{
private:
bool sceneloop = false;
public:
virtual void Start();
virtual void EventHandler(SDL_Event event);
virtual void Update();
virtual void Draw();
void _toggleLoopMode() { sceneloop = !sceneloop; }
bool _sceneloop() { return sceneloop; }
};
我的问题是我不知道用户为他的类选择什么名称,那么我如何从未知类中的主类调用已知方法(如 Start 或 EventHandler)?
我不知道但用户知道的类的示例可以是:
class SomeFunnyRandomName : public BaseScene
{
public:
void Start();
void Eventhandler(SDL_Event event);
void Update();
void Draw();
};
因此,形成我需要在“SomeFunnyRandomName”中调用 Start() 的主类,而无需:
SomeFunnyRandomName sfrn = new SomeFunnyRandomName();
如果您可以包含代码,它将非常有帮助(但不是必需的)。
解决方案
您获取对 的引用或指针BaseScene
,然后调用其上的方法。调用者传递其派生类的实例。
class UsesScene {
BaseScene & scene;
public:
UsesScene(BaseScene & scene) : scene(scene) {}
void doStuff() { scene.Start(); scene.Update(); }
/*... etc*/
};
int main() {
SomeFunnyRandomName scene;
UsesScene usesScene(scene);
usesScene.doStuff();
}
推荐阅读
- java - 如何让变量记住结果
- node.js - curl -I localhost:8888/api/config 不返回响应
- reactjs - React 中的路由器、重定向和身份验证上下文问题
- r - 为什么绘制的预测值和边际效应不同?
- jquery - 从另一个函数获取返回对象
- laravel - laravel 升级到 5.2
- kotlin - Lambda 可以更改引用,但 fun 在 Kotlin 中不能
- linux - 如何重定向二进制文件的打开调用
- python - 如何在 python3 中将 dd-mm-yyyy 转换为 ISODate 格式
- maven - 运行测试运行程序时输出为 0 Scenarios