是否有任何C++图形用户界面工具包支持将回调函数定义为C++11λ表达式?我相信这是使用C# (至少与C++相比)编写基于图形用户界面的程序的独特优势。我应该对以lambda表达式作为参数的函数使用什么类型的签名,以及这些函数如何支持隐式转换?
发布于 2012-04-06 03:06:59
是否有C++图形用户界面工具包支持将回调函数定义为C++11λ表达式?
如果它们接受函数指针,那么您至少可以使用不捕获任何内容的lambda。这样的lambda可以自动转换为函数指针。
我应该对以lambda表达式作为参数的函数使用什么类型的签名,以及这些函数如何支持隐式转换?
如果你希望人们使用lambdas或任何可调用的对象,那么你可以让你的API接受std::function对象,或者使用模板:
template<typename Callback>
void do_it(Callback c) {
c();
}
do_it([&]{ c = a+b; });模板将允许内联lambda,而std::function需要间接性。这对于GUI回调来说可能并不重要。
发布于 2012-04-06 01:45:36
问题第二部分的答案是:你可以在Signature =例如void (int)的地方使用std::function<Signature>,或者--如果lambda不接受闭包--老的void (Foo*)(int)方法,因为没有闭包的lambda必须可以转换为正确的函数类型。因此,举个例子,调用一个带有签名的方法:
void AddHandler(std::function<void (int)> const &);可能如下所示:
myObject.AddHandler([&](int _) {
// do something and access captured variables by reference
});发布于 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/
玩得开心!
https://stackoverflow.com/questions/10033142
复制相似问题