gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 17:52:30 27 4
gpt4 key购买 nike

我正在编写一些使用 libsigc++ 的 C++ 代码用于信号(事件)。

我是 C++ 的新手,我倾向于用 C# 思考。与我在 C# 中想要的代码等效的代码如下:

var names = new List<string>();
thing.Happened += (string name) => names.Add(name);
thing.DoStuff();

libsigc++ tutorials很好地展示了如何将函数或成员绑定(bind)到信号,但我不想为这样一个应该真正私密封装在其客户端中的简单方法定义一个新的类级方法,至少对我来说是这样思考。

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

最佳答案

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

我没有安装这个库,所以我不能测试这个,但是看看 this example ,我相信这个修改应该有效:

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;
}

附言

我对这个答案并不完全有信心,因为我无法对其进行测试。我在文档中找到了插槽类的构造函数,因为我从未在类模板中遇到过构造函数模板,所以我不确定这些类型是否都能解析。所以无论如何,我只使用标准库编写了一个测试,它做了类似于构造函数所做的事情,并且它有效。 Here it is

关于c++ - 使用 lambda 函数处理 C++ libsigc++ 信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5994101/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com