首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >作为回调函数的C++11 Lambda表达式

作为回调函数的C++11 Lambda表达式
EN

Stack Overflow用户
提问于 2012-04-06 01:26:43
回答 4查看 7.4K关注 0票数 6

是否有任何C++图形用户界面工具包支持将回调函数定义为C++11λ表达式?我相信这是使用C# (至少与C++相比)编写基于图形用户界面的程序的独特优势。我应该对以lambda表达式作为参数的函数使用什么类型的签名,以及这些函数如何支持隐式转换?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-04-06 03:06:59

是否有C++图形用户界面工具包支持将回调函数定义为C++11λ表达式?

如果它们接受函数指针,那么您至少可以使用不捕获任何内容的lambda。这样的lambda可以自动转换为函数指针。

我应该对以lambda表达式作为参数的函数使用什么类型的签名,以及这些函数如何支持隐式转换?

如果你希望人们使用lambdas或任何可调用的对象,那么你可以让你的API接受std::function对象,或者使用模板:

代码语言:javascript
复制
template<typename Callback>
void do_it(Callback c) {
    c();
}

do_it([&]{ c = a+b; });

模板将允许内联lambda,而std::function需要间接性。这对于GUI回调来说可能并不重要。

票数 4
EN

Stack Overflow用户

发布于 2012-04-06 01:45:36

问题第二部分的答案是:你可以在Signature =例如void (int)的地方使用std::function<Signature>,或者--如果lambda不接受闭包--老的void (Foo*)(int)方法,因为没有闭包的lambda必须可以转换为正确的函数类型。因此,举个例子,调用一个带有签名的方法:

代码语言:javascript
复制
void AddHandler(std::function<void (int)> const &);

可能如下所示:

代码语言:javascript
复制
myObject.AddHandler([&](int _) {
    // do something and access captured variables by reference
});
票数 6
EN

Stack Overflow用户

发布于 2012-04-14 10:35:13

有一个新的GUI工具包可以满足您的需求。它试图提供许多特性来提高开发效率。

对图书馆的介绍。http://nanaproject.wordpress.com/2011/12/16/preliminary-study-of-nana-c-library/

这篇文章解释了如何通过将库和std::bind一起使用来降低复杂性。http://nanaproject.wordpress.com/2012/01/31/idioms-and-insights-for-a-good-design/

玩得开心!

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

https://stackoverflow.com/questions/10033142

复制
相关文章

相似问题

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