在C++ 11中委派

dot*_*222 11 c++ delegates c++11

C++ 11是否提供代理?

如果没有,在C++中做类似事情的最佳(最有效)方法是什么?Boost.Signals?FastDelegate?别的什么?

Jam*_*lis 14

您可以使用bind将成员函数绑定到类实例来获得类似委托的语义:

#include <functional>

struct C 
{
    void Foo(int) { }
};

void Bar(std::function<void(int)> func) 
{ 
    func(42); // calls obj.Foo(42)
}

int main() 
{
    using namespace std::placeholders;

    C obj;
    Bar(std::bind(&C::Foo, obj, _1));
}
Run Code Online (Sandbox Code Playgroud)

在此示例中,Bar()获取具有单个int参数且返回的任何内容void.

main(),我们将指向成员函数的指针绑定到named C::Foo的实例.这为我们提供了一个可以使用单个参数调用并返回的对象. Cobjintvoid

我们Bar()使用此对象Bar()调用并进行调用obj.Foo(42).