首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用lambda函数处理C++ libsigc++信号

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

Stack Overflow用户
提问于 2011-05-13 23:19:52
回答 3查看 2.3K关注 0票数 8

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

我对C++还很陌生,而且我倾向于用C#来思考。我希望在C#中使用的等效代码如下所示:

代码语言:javascript
复制
var names = new List<string>();
thing.Happened += (string name) => names.Add(name);
thing.DoStuff();

libsigc++ tutorials很好地展示了如何将函数或成员绑定到信号,但我不想为这样一个简单方法定义一个新的类级方法,该方法实际上应该以私有方式封装在其客户端中,至少在我看来是这样。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-05-14 00:17:58

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

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

代码语言:javascript
复制
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;
}

P.S.

我对这个答案不是完全有信心,因为我不能测试它。我在文档中找到了slot类的构造函数,因为我从未在类模板中遇到过构造函数模板,所以我不确定这些类型是否都能够解析。所以不管怎样,我只使用标准库编写了一个测试,它的作用类似于构造函数,并且它可以工作。Here it is

票数 6
EN

Stack Overflow用户

发布于 2011-05-14 00:21:13

C++ 0x supports lambdas,可能会允许你做一些类似于你在C#中做的事情。用于C++0x ready编译器的See What C++ compilers are supporting lambda already?

票数 2
EN

Stack Overflow用户

发布于 2011-05-14 00:19:17

This site on MSDN对lambda特性以及auto关键字在C++0x中的使用有一个非常好的布局和全面的介绍。它有一些非常有用的示例,以及lambdas和C++早期版本中的函数对象之间的连接。请注意,如果您使用的是g++版本4.4或更高版本,则可能必须使用-std=c++0x1std=gnu++0x标志才能正确编译这些功能。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5994101

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档