On Sat, 26 Oct 2013 11:22:15 +0200 Kjell Ahlstedt <kjell.ahlst...@bredband.net> wrote: > As a result of the discussion in > https://mail.gnome.org/archives/libsigc-list/2013-July/msg00007.html > I have at last pushed a libsigc++ commit, where I explain how > std::function<> can be used in libsigc++, and why it's not that easy > to use std::bind(). > https://git.gnome.org/browse/libsigc++2/commit/?id=49e753a7e2d2ce85bc090da47b80c78a24c065d6 > > I said in July that std::function should be mentioned wherever lambda > expressions are mentioned. That's not exactly what I've done. I've > realized that std::function can be an alternative to a sigc::slot > rather than an alternative to a lambda expression.
I wouldn't say that std::function can be an "alternative" to sigc::slot: it is that sigc::slot can encapsulate any functor and therefore can wrap a std::function object. However, you would not often want to do that. You would normally pass the underlying functor that std::function might wrap (say, a lambda expression) to sigc::slot directly. As I mentioned in the correspondence to which you refer, to encapsulate the underlying functor using std::function, and then encapsulate that using sigc::slot, causes double virtual dispatch (as well as additional memory allocation). Both sigc::slot and std::function perform type erasure. It follows that I think the text "It is often possible to replace sigc::slot<> by the C++11 class std::function<>, for instance ..." is a little misleading. It is not replacing it, it is wrapping it by implicit conversion. But as I say, better to encourage people to pass the lambda expression (or whatever) directly. > As is now explained in the documentation of > sigc::signal<>::connect(), the problem with std::bind() is that it > creates a functor whose operator()() is a variadic template. > SIGC_FUNCTORS_DEDUCE_RESULT_TYPE_WITH_DECLTYPE can't deduce the > result type of such a functor. I've no idea how (or if) that can be > fixed. > > _______________________________________________ > libsigc-list mailing list > libsigc-list@gnome.org > https://mail.gnome.org/mailman/listinfo/libsigc-list _______________________________________________ libsigc-list mailing list libsigc-list@gnome.org https://mail.gnome.org/mailman/listinfo/libsigc-list