Tech Off Post

Single Post Permalink

View Thread: C++0x (vs2010) question, please tell me what i'm doing wrong
  • User profile image
    new2STL

    I posted this link on last Advanced STL show: http://blog.tomaka17.com/2011/01/some-interesting-usages-of-stdfunction/

    here an except of the code (how to register a function to call)

    template <typename TEvent, typename TListener >
    void _registerListener (const TListener& function) {
    static_assert(!std::is_array<TEvent>::value, "You cannot register an array as an event type");
    static_assert(std::is_convertible<TListener,std::function<void(TEvent&)>>::value, "Unvalid callback for this event type");
    _listeners.insert(std::make_pair(&typeid(std::decay<TEvent>::type), [=](void* ev) { function(*static_cast<TEvent*>(ev)); }));
    }

    is_convertible and decay seens what you are looking for deal with functors, function and lambdas. There are other interesting stuff on the blog. (I think I see an example with std::bind for additional "magic"call somewhere, I'll try re-digg it)