是否可以将函数返回类型用作C ++中另一个函数的声明中的参数?

时间:2018-10-15 07:06:16

标签: c++ c++11 decltype

我想要这样的东西:

std::tuple<int, bool, double> MyFunction_1 (void);

void MyFunction_2 (decltype (MyFunction_1) &params);

很显然,在此示例中,将传递指向函数的代码指针。

我想拥有这样的东西:

void MyFunction_2 (std::tuple<int, bool, double>  &params);

有可能这样做吗?

3 个答案:

答案 0 :(得分:35)

decltype (MyFunction_1)将为您提供MyFunction_1的类型(即函数类型std::tuple<int, bool, double> ()),您需要模拟一个函数调用 1 < / sup>(通过添加())来获取返回类型(即std::tuple<int, bool, double>),例如

void MyFunction_2 (decltype (MyFunction_1()) &params);
//                                       ^^

1 该表达式在编译时求值,实际上不会在运行时调用该函数。

答案 1 :(得分:16)

MyFunction_1类型不是std::tuple<int, bool, double>-非正式地,您可以将其视为函数指针。实际上,&MyFunction_1会自身衰变,并且一定是指针。

所以decltype(MyFunction_1)不是您想要的。

解决方案是编写decltype(MyFunction_1())MyFunction_1() 类型 std::tuple<int, bool, double>。请注意,这实际上并不是调用该函数;在这方面就像sizeof

答案 2 :(得分:3)

using RetType = std::invoke_result<decltype(f)>::type;

使用它:https://gcc.godbolt.org/z/AE7lj_