成员功能C 的不同实现
Different implementations for a member function C++
我有一个奇怪的问题。我已经开始在C /SFML中实现简单的游戏引擎。我实现了一个消息和消息队列系统,以便将模块解耦并避免任何令人困惑的依赖关系。我也实现了一个类实体,该实体代表游戏中的一个对象(包含其位置,精灵等(。
。每个实体都有一个称为" on_message"的函数,当指定实体应接收消息时,消息队列被消息队列调用。(例如:如果实体P1是来自P2的消息的目的地,则MSG_Queue将调用P1.ON_MESSAGE传递MSG_TYPE" SADE损坏",以做某事。
我的问题,所有实体(类实体的对象(现在具有相同的函数on_message的实现。但是,此功能应从一个实体到另一个实体(因此,当按下"说"空间时,玩家的行为与敌人不同(
我有一个想法是使用继承,但我认为这不是正确的,好像游戏有100个实体,我应该做100堂课!?
?有没有有效的想法可以解决这个问题?预先感谢
我有一个想法是使用继承,但我认为这不是正确的,好像游戏有100个实体,我应该做100堂课!?
?
这实际上是完全可能的,甚至对于足够定义的实体而言,它甚至可能是"正确的事物"。如果除了消息接收到的行为外,您还需要数据成员或其他自定义功能将所有内容包装在一起是一个好主意。
另一方面,如果您有很多非常相似的实体,并且在收到一些消息时的行为有所不同,则可能会有一个常见的超级类,该超类使用例如使用例如。可分配的std::function
。这样的东西:
struct Entity {
...
virtual ret on_message(msg_type msg) = 0;
};
...
struct LightweightCustomEntity : public Entity {
std::function<ret(msg_type)> custom_on_message;
virtual ret on_message(msg_type msg) override {
if(!custom_on_message) return ret();
return custom_on_message(msg);
}
};
// ...
// in reality this would be a smart pointer or whatever
Entity *e = new LightweightCustomEntity;
e->custom_on_message = [](msg_type msg) {
if(msg.type == SAY_DAMAGE) {
return ret(42);
}
return ret();
};
这允许更多的运行时灵活性,但是请注意,您并没有真正获得太多的紧凑性 - 尤其是因为C 11我们可以继承构造函数,定义一个从Entity
继承的新类,并且覆盖on_message
或多或少地需要相同的代码。
- 我应该实现右值推送功能吗?我应该使用std::move吗
- 在用于格式4的arm模拟器中实现功能时的一个问题
- 如何使用lock_guard在c++11中实现scoped_lock功能
- 多次实现成员功能
- 如何在现代C++中实现没有宏的系统特定功能
- 使用 std::call_once 实现类似单例的功能
- "this"关键字在C++中的实现限制,因为它与危险但功能示例有关
- Linux 源代码中普通磁盘文件的"轮询"功能在哪里实现?
- 如何实现删除数组的功能?
- 我当前实现的双向链表类是否需要重构迭代器 end() 功能?
- 如何实现功能线程安全
- 实现功能对象绑定而无需使用C 11
- 基于类实现功能的困难
- 远程过程调用和MIDL:如何使用[OUT]属性实现功能
- 对CUDA实现功能的未定义引用
- 在班级基础中实现功能的最有效方法
- 在C 中超载宏实现功能
- 如何在编译过程中实现功能单元测试
- 实现功能齐全的移位流语法
- 在C++中实现功能的两种方法有什么区别?