c++ - 将 Functor 作为参数传递给方法

标签 c++ templates functor

我有以下两个展示命令模式的类。 (不幸的是,两者都有唯一的方法名称。)

//pseudocode 
class Subscriber {
    virtual void receive(const Event&) = 0;
}

class Dispatcher {
    virtual void dispatch(const Event&) = 0;
}

我有一个类模板,它有一个某种类型的列表,并有一个方法来迭代这个列表。

//pseudocode
template<typename T>
class Registry {
    typedef list<T> ObjectList;
    ObjectList _objects;
    void iterate(const Event& event) {
        for_each(_objects.begin(), _objects.end(), ...);  //not sure what to do here
    }
}

我想使用 mem_fun 创建一个 Functor,它会根据需要调用 receivedispatch。我能够创建一个简单的用例,我只需调用一个没有任何参数的方法。即

//pseudocode
class Simple {
    void simple() {/*...*/}
}

然后我重复:

for_each(_objects.begin(), _objects.end(), mem_fun(&Simple::simple);

不幸的是,我不知道如何将 event 参数传递给 mem_fun。查看 header ,似乎我可以传递单个参数,但我不太精通 C++,无法理解我需要做什么。

最终,我想让 iterate 方法接受一种仿函数,这样它就会在列表中的每个方法上触发该方法。

我宁愿避免使用 Boost...我认为这完全有可能,而无需将这个框架拖入混合中。

谢谢!

最佳答案

这可能是最直接的方式:

class event_forwarder // make private in Registry
{
public:
    event_forwarder(const Event& event) :
    mEvent(event)
    {}

    void operator()(Subscriber& subcriber) const
    {
        subscriber.receive(mEvent);
    }

    void operator()(Dispatcher& dispatcher) const
    {
        dispatcher.dispatch(mEvent);
    }

private:
    const Event& mEvent;
};

然后:

for_each(_objects.begin(), _objects.end(), event_forwarder(event));

关于c++ - 将 Functor 作为参数传递给方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5464496/

相关文章:

android - 使用NDK构建项目失败

c++ - Null 作为默认模板参数

c++ - 多映射中的 std::find_if 返回带有仿函数的错误

c++ - 重载 "function call"运算符有什么用处?

c++ - 使用 SID 获取 LocalGroup Windows C++ 的名称

c++ - 无法让程序识别用户是否输入了零

c++ - 使指向同一类的两个不同指针之间建立对应关系

c++ - 如何返回模板类中成员变量的拷贝?

c++ - Functor 类在构造函数中工作

c++ - 将另一个参数传递给仿函数的库