使用lambda函数处理C++ libsigc ++信号

Dre*_*kes 8 c++ events signals libsigc++

我正在研究一些使用libsigc ++进行信令(事件)的C++代码.

我对C++很陌生,我倾向于用C#思考.在C#中我想要的等价代码将是这样的:

var names = new List<string>();
thing.Happened += (string name) => names.Add(name);
thing.DoStuff();
Run Code Online (Sandbox Code Playgroud)

libsigc ++教程做展示如何绑定一个函数或成员的信号的一个很好的工作,但我不希望定义一个新的类级别的方法对于真正应该私下封装的客户端中这样一个简单的方法,在至少我的想法.

libsigc ++ API似乎支持lambda表达式,但我没有找到任何显示如何使用它们的示例.有人可以帮我吗?请记住,我是一个C++新手!

Ben*_*ley 6

Lambdas只是函数对象.因此,在任何可以使用任意(即模板化)仿函数的地方,您都可以使用lambda.

我没有安装库,所以我无法测试这个,但是看看这个例子,我相信这个修改应该有效:

int main()
{
    AlienDetector mydetector;
    auto warn_people = []() {
            cout << "There are aliens in the carpark!" << endl;
    };

    mydetector.signal_detected.connect( sigc::slot<void>(warn_people) );

    mydetector.run();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

PS

我对这个答案并不完全自信,因为我无法测试它.我在文档中找到了slot类的构造函数,因为我从未在类模板中遇到构造函数模板,所以我不确定这些类型是否都能解析.所以无论如何,我只使用标准库编写了一个测试,它做了类似于构造函数的工作,并且它有效.这里是