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) ¶ms); 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) ¶ms);
std::元组MyFunction_1(void);
void MyFunction_2(decltype(MyFunction_1)和params);
显然,在本例中,将传递一个指向函数的代码指针
我想得到与此等效的:
void MyFunction_2 (std::tuple<int, bool, double> ¶ms);
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;