当前位置:  开发笔记 > 编程语言 > 正文

多态回调实现

如何解决《多态回调实现》经验,为你挑选了1个好方法。

我在我的应用程序中使用基于组件的架构.我正处于需要允许a Component指定将在事件上执行的回调的阶段.

typedef void(Component::*EventCallback) ();
typedef std::pair EventDelegate;

上述类型定义的问题是所有组件都继承,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::pair EventDelegate;

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.



1> Edward Stran..:
using EventDeligate = std::function;

auto cp = std::make_shared();
auto ed = EventDeligate([cp](){ cp.moveToXY(); });

要按照自己的方式去做,Component必须有一个(可能是纯粹的)虚函数moveToXY.


那将是非常愚蠢的.作为一个业余爱好项目,我希望您能够使用所有工具.为什么要学习我们不再这样做的方式?
推荐阅读
echo7111436
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有