显然,您可以使用 decltype(foo()) 获取函数的返回类型,但是如果 foo 接受不起作用的参数,则必须将一些虚拟参数传递给 foo 才能使其工作。但是,有没有办法在不传递任何参数的情况下获取函数的返回类型?
问问题
358 次
2 回答
7
C++11 提供std::result_of
.
http://en.cppreference.com/w/cpp/types/result_of
在函数接受参数的情况下,您可以使用std::declval
.
于 2013-05-21T21:44:03.400 回答
6
假设返回类型不依赖于参数类型(在这种情况下你应该使用类似的东西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, "!");
}
于 2013-05-21T21:46:51.070 回答