C++ 是否可以在C+;中声明另一个函数时使用函数返回类型作为参数+;?

C++ 是否可以在C+;中声明另一个函数时使用函数返回类型作为参数+;?,c++,c++11,decltype,C++,C++11,Decltype,我想要这样的东西: std::tuple<int, bool, double> MyFunction_1 (void); void MyFunction_2 (decltype (MyFunction_1) &params); std::元组MyFunction_1(void); void MyFunction_2(decltype(MyFunction_1)和params); 显然,在本例中,将传递一个指向函数的代码指针 我想得到与此等效的: void MyFunct

我想要这样的东西:

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

void MyFunction_2 (decltype (MyFunction_1) &params);
std::元组MyFunction_1(void);
void MyFunction_2(decltype(MyFunction_1)和params);
显然,在本例中,将传递一个指向函数的代码指针

我想得到与此等效的:

void MyFunction_2 (std::tuple<int, bool, double>  &params);
void MyFunction_2(std::tuple¶ms);
可以这样做吗?

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


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

MyFunction_1的类型不是
std::tuple
-非正式地说,您可以将其视为函数指针。事实上,
&MyFunction_1
会自行衰减,当然是一个指针

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

解决方案是编写
decltype(MyFunction_1())
MyFunction_1()
的类型是
std::tuple
。注意,这实际上并不调用函数;在这方面,它很像
sizeof

使用RetType=std::invoke\u result::type;
using RetType = std::invoke_result<decltype(f)>::type;

玩它:

因为。。。。?FGITWing很好,但答案应该向OP和未来的读者解释为什么在这里添加两个字符可以解决问题。“您需要在
decltype()
中模拟函数调用”是更好的措辞吗PAnother方法(可能更简单):@Ptaq666这是一个答案,应该作为一个答案发布。
MyFunction\u 1
衰减到一个指针,
&MyFunction\u 1
没有——它已经是一个:)关于措辞,我想你在问是否可以使用MyFunction\u 1返回类型作为MyFunction\u 2的参数。谢谢你的更正可能重复的不它不是重复的,因为我的问题是用不同的和更清楚的方式表达的
using RetType = std::invoke_result<decltype(f)>::type;