On Thu, 2012-01-05 at 16:41 +0800, Chow Loong Jin wrote: > On 30/08/2011 21:16, Jakub Łukomski wrote: > > Hello. Is there a way to use value returning C++0x lambdas with libsigc++? > > > > Functions not returning values work fine: > > > > sigc::slot <void> slot1 = [] () { }; > > sigc::slot <void, int> slot2 = [] (int) { }; > > > > no compilation problems. However when a return value is added: > > > > sigc::slot <bool> slot3 = [] () -> bool { return true; }; > > sigc::slot <bool, int> slot4 = [] (int) -> bool { return true; }; > > > > I end up getting two compilation errors: > > /usr/include/sigc++-2.0/sigc++/functors/slot.h:103:36: error: void > > value not ignored as it ought to be > > /usr/include/sigc++-2.0/sigc++/adaptors/adaptor_trait.h:251:21: error: > > return-statement with a value, in function returning 'void' > > > > Is that possible to achieve in some other way, or are lambdas with a return > > value not supported by libsigc++ yet? > > Alright, so I ran into this situation myself and spent the morning without > internet connection figuring this out, and.... > > -----8<------ > #include <type_traits> > #include <sigc++/sigc++.h> > > namespace sigc > { > template <typename Functor> > struct functor_trait<Functor, false> > { > typedef decltype (::sigc::mem_fun (std::declval<Functor&> (), > &Functor::operator())) > _intermediate; > > typedef typename _intermediate::result_type result_type; > typedef Functor functor_type; > }; > } > ----->8------ > > Just put that in a header somewhere and #include it when you want to use > lambdas. It also allows you to throw std::function, boost::function, or any > other object with an appropriate operator() at sigc::signals as well, since > sigc::slot happily wraps them up now. > > It still doesn't work with classes that have an overloaded operator(), but you > can always use a lambda for those cases.
Is this something that we should add to libsigc++? If so, it would be great to have a patch, with a test case too. -- Murray Cumming murr...@murrayc.com www.murrayc.com www.openismus.com _______________________________________________ libsigc-list mailing list libsigc-list@gnome.org http://mail.gnome.org/mailman/listinfo/libsigc-list