
2011/5/4 Arno Schödl <aschoedl@think-cell.com>:
Hello,
is there a way to get the result type of an overloaded member function? Something like:
template< class T, class A >
typename boost::result_of< T::func(A) >::type invoke( T& t, A& a ) {
return t.func(a);
}
Another solution based on decltype. Maybe interesting for you, if you already use c++0x. This code compiles using msvc-10. Regards, Joachim //======================================================== class T0 { public: int func(const int& x)const { cout << "T0::func(int) " << x << endl; return x; }; float func(const float& x)const { cout << "T0::func(float) " << x << endl; return x; }; }; class T1 { public: template<class A> A func(const A& x)const { cout << "T1::func(A) " << x << endl; return x; }; }; template< class T, class A > typename decltype( T().func(A()) ) invoke( T& t, A& a ) { return t.func(a); }; BOOST_AUTO_TEST_CASE(overladed_member_function_call_2) { T0 t0; int i = 42; float f = 43; invoke(t0, i); invoke(t0, f); T1 t1; invoke(t1, i); invoke(t1, f); } //======================================================== -- Interval Container Library [Boost.Icl] http://www.joachim-faulhaber.de