2012-12-30 25 views
3

考虑以下功能:获取C++运算符的返回类型?

template<class T1, class T2, class T3 = /* SOMETHING */> 
T3 f(const T1& x, const T2& y); 

我想T3等于的T1+T2返回类型。如何用C++ 11做到这一点?

注:我不想的std::common_type<T1, T2>::type的结果,我想真正的类型T1+T2,考虑到operator+可以是一个非成员函数,也可以是T1成员函数。

+2

你在函数中使用'T3'可言,还是确定要删除多余的参数,只是让它回归直接键入? – chris

+0

我的观点是,如果你再次需要'T3',你可以使用'decltype(std :: declval ()+ std :: declval ())'。 – chris

+0

@chris您应该将您的评论发布为答案。如果'f'的主体中需要'T3',它可以避免重复的代码。 –

回答

13

通常的方法是decltype和后回报型:

template<class T1, class T2> 
auto f(const T1& x, const T2& y) -> decltype(x+y);