是否可以在不向其传递参数的情况下获取函数的返回类型?

时间:2013-05-21 21:43:10

标签: c++ c++11

显然,您可以使用decltype(foo())获取函数的返回类型,但是如果foo接受不起作用的参数,则必须将一些伪参数传递给foo才能使其工作。但是,有没有办法获得函数的返回类型而不必传递任何参数?

2 个答案:

答案 0 :(得分:7)

假设返回类型不依赖于参数类型(在这种情况下你应该使用类似std::result_of的东西,但你必须提供这些参数的类型),你可以编写一个简单的类型特征允许您从函数类型中推导出返回类型:

#include <type_traits>

template<typename T>
struct return_type;

template<typename R, typename... Args>
struct return_type<R(Args...)>
{
    using type = R;
};

int foo(double, int);

int main()
{
    using return_of_foo = return_type<decltype(foo)>::type;
    static_assert(std::is_same<return_of_foo, int>::value, "!");
}

答案 1 :(得分:6)

C ++ 11提供std::result_of

http://en.cppreference.com/w/cpp/types/result_of

在函数接受参数的情况下,您可以使用std::declval提供“虚拟”参数。

http://en.cppreference.com/w/cpp/utility/declval