我正在研究一些使用libsigc ++进行信令(事件)的C++代码.
我对C++很陌生,我倾向于用C#思考.在C#中我想要的等价代码将是这样的:
var names = new List<string>();
thing.Happened += (string name) => names.Add(name);
thing.DoStuff();
Run Code Online (Sandbox Code Playgroud)
该libsigc ++教程做展示如何绑定一个函数或成员的信号的一个很好的工作,但我不希望定义一个新的类级别的方法对于真正应该私下封装的客户端中这样一个简单的方法,在至少我的想法.
libsigc ++ API似乎支持lambda表达式,但我没有找到任何显示如何使用它们的示例.有人可以帮我吗?请记住,我是一个C++新手!
我想在gtk ++中使用与goocanvas相关的lambda表达式.根据我的理解,这意味着我必须能够将我的lambda放在sigc ++ functor中.
我试过这样的事情:
sigc::slot<bool, const Glib::RefPtr<Goocanvas::Item>& , GdkEventMotion* > slot2=
[]( const Glib::RefPtr<Goocanvas::Item>& item, GdkEventMotion* ev)->bool
{
cout << "Lambda " << endl; return false;
};
((Glib::RefPtr<Goocanvas::Item>&)item1)->signal_motion_notify_event().connect( slot2);
Run Code Online (Sandbox Code Playgroud)
但这不会编译.
有没有机会让sigc直接使用lambdas或更好的gtkmm没有sigc ++中间体:-)