3

I wonder how can we implement a result_of template class to get the return type of a function.

I know C++11 has std::result_of or decltype. But how the boost implement this feature in C++98 standard?

I have tried to learn from source code, but I didn't get the point.

It should be like this:

int fint() { return 0;}
double fdouble() { return double(0);}
cout << sizeof(result_of<fint>::type) << endl; // should be 4
cout << sizeof(result_of<fdouble>::type) << endl; // should be 8
result_of<fint>::type x; // same as `int x;`
result_of<fdouble>::type y; // same as `double y;`
Liu Weibo
  • 434
  • 5
  • 16

1 Answers1

4

Specialize for Ret (*) (T1, ...,TN) up to some N:

template <typename T> struct result_of;

template <typename Ret> struct result_of<Ret (*)()> {
    typedef Ret type;
};

template <typename Ret, typename T1> struct result_of<Ret (*)(T1)> {
    typedef Ret type;
};

template <typename Ret, typename T1>
struct result_of<Ret (*)(T1, ...)> { /* ellipsis as for printf */
    typedef Ret type;
};

template <typename Ret, typename T1, typename T2> struct result_of<Ret (*)(T1, T2)> {
    typedef Ret type;
};

// ...
Jarod42
  • 203,559
  • 14
  • 181
  • 302