我在我的应用程序中使用基于组件的架构.我正处于需要允许a Component
指定将在事件上执行的回调的阶段.
typedef void(Component::*EventCallback) (); typedef std::pairEventDelegate;
上述类型定义的问题是所有组件都继承,Component
但永远不会是直接的Component
.因此以下代码行无效:
MoveComponent* mc = new MoveComponent(); // inherits from Component EventDelegate ed(mc , &MoveComponent::moveToXY); // Compiler error here: expects Component* not MoveComponent*, and same for EventCallback.
我有什么想法可以实现'多态'回调?或任何其他设计/实施建议?
用法示例:
typedef void(Component::*EventCallback) (); typedef std::pairEventDelegate; class Component { // ... }; class MoveComponent : public Component { public: MoveComponent() { EventDelegate ed(this, &MoveComponent::moveToXY); ComponentManager::registerEvent(ed); } void moveToXY() { } }; class ComponentManager { public: static void registerEvent(EventDelegate ed) { evtRegistry.push_back(ed); } static void runEvent(EventDelegate ed) { for (int i=0; i *ec(); } } private: static std::vector evtRegistry; };
Edward Stran.. 6
using EventDeligate = std::function; auto cp = std::make_shared (); auto ed = EventDeligate([cp](){ cp.moveToXY(); });
要按照自己的方式去做,Component
必须有一个(可能是纯粹的)虚函数moveToXY
.
using EventDeligate = std::function; auto cp = std::make_shared (); auto ed = EventDeligate([cp](){ cp.moveToXY(); });
要按照自己的方式去做,Component
必须有一个(可能是纯粹的)虚函数moveToXY
.