- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在编写一些使用 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/
我正在构建一个使用 libsigc-2.0 ( -lsigc-2.0 ) 的应用程序 我收到运行时错误,因为应用程序找不到 libsigc-2.0.so.0 error while loading s
第一次使用libsigc++做信号槽,我有两个功能正常,我的场景:我写了一个函数作为 bool 函数,如果当 socket 有 recv 数据时,它返回 true: bool Socket::isDa
我正在处理一些基本的信号代码,但我无法弄清楚这个函数是如何作为参数传入的。我在 libsigc++ tutorial 中看到这段代码: AlienDetector mydetector; mydete
在gtkmm tutorial hello world example libsigc++ 库在 helloword.cc 文件中使用: #include "helloworld.h" #includ
我正在关注 libsigc++-2.0 的官方文档,我发现了 this example : class AlienDetector { public: AlienDetector();
我正在尝试根据此页面在 mac os 10.8 (Mountain Lion) 上安装 ardor ( http://ardour.org) 依赖项:http://ardour.org/buildin
我正在编写一些使用 libsigc++ 的 C++ 代码用于信号(事件)。 我是 C++ 的新手,我倾向于用 C# 思考。与我在 C# 中想要的代码等效的代码如下: var names = new L
我是一名优秀的程序员,十分优秀!