如何在C++中获取返回类型的重载方法?

问题描述:

我有一个结构的地方:如何在C++中获取返回类型的重载方法?

struct A { 
    ComplicatedType1 f(); 
    ComplicatedType2 f(int); 
}; 

我想用编译时的助手获得回报型f()。我想std::result_of<>

using Type = std::result_of<decltype(&A::f)()>::type; 

但是,编译器给我一个合理的错误:“引用重载函数无法解析”。

所以我去SO看到this接受和upvoted的答案,这表明建立一个static_cast<ComplicatedType1 (A::*)()>(&A::f) - 但我没有ComplicatedType1在这一点上。我被困在递归中。


如何获得ComplicatedType1using表达式内用最少的代码?

+3

这可能是decltype的工作吗? –

+1

你不能用'auto'关键字使用类型扣除吗? –

+0

'std :: result_of'需要一个* type *作为它的模板参数,但'&A :: f'不是一个类型; '(&A :: f)()'也不是。此外,'result_of'是一个特殊的pre-C++ 11工具,对于大多数应用程序来说,它被'decltype'所取代:'decltype(f())' – dyp

那是为decltype + declval

#include <iostream> 
#include <type_traits> 
#include <utility> 

struct ComplicatedType1 {}; 
struct ComplicatedType2 {}; 

struct A { 
    ComplicatedType1 f(); 
    ComplicatedType2 f(int); 
}; 

int main() 
{ 
    using Type = decltype(std::declval<A>().f()); 
    static_assert(std::is_same<Type,ComplicatedType1>::value,"Oops"); 
} 

live at Coliru

编辑作业:改变以获得F(的返回类型)(而不是F(INT))和以C++ 11(而不是C++ 14)上Coliru