如何在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
在这一点上。我被困在递归中。
如何获得ComplicatedType1
我using
表达式内用最少的代码?
答
#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");
}
编辑作业:改变以获得F(的返回类型)(而不是F(INT))和以C++ 11(而不是C++ 14)上Coliru
这可能是decltype的工作吗? –
你不能用'auto'关键字使用类型扣除吗? –
'std :: result_of'需要一个* type *作为它的模板参数,但'&A :: f'不是一个类型; '(&A :: f)()'也不是。此外,'result_of'是一个特殊的pre-C++ 11工具,对于大多数应用程序来说,它被'decltype'所取代:'decltype(f())' – dyp