Templates, Function Pointers and C++0x
- by user328543
One of my personal experiments to understand some of the C++0x features: I'm trying to pass a function pointer to a template function to execute. Eventually the execution is supposed to happen in a different thread. But with all the different types of functions, I can't get the templates to work.
#include `<functional`>
int foo(void) {return 2;}
class bar {
public:
    int operator() (void) {return 4;};
    int something(int a) {return a;};
};
template <class C>
int func(C&& c)
{
    //typedef typename std::result_of< C() >::type result_type;
    typedef typename std::conditional< 
        std::is_pointer< C >::value,
        std::result_of< C() >::type,
        std::conditional<
            std::is_object< C >::value,
            std::result_of< typename C::operator() >::type,
            void>
        >::type result_type;
    result_type result = c();
    return result;
}
int main(int argc, char* argv[])
{
    // call with a function pointer
    func(foo);
    // call with a member function
    bar b;
    func(b);
    // call with a bind expression
    func(std::bind(&bar::something, b, 42));
    // call with a lambda expression
    func( [](void)->int {return 12;} );
    return 0;
}
The result_of template alone doesn't seem to be able to find the operator() in class bar and the clunky conditional I created doesn't compile. Any ideas? Will I have additional problems with const functions?