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

Dmi*_*gin 31 c++ decltype c++11

我想要这样的东西:

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

void MyFunction_2 (decltype (MyFunction_1) &params);
Run Code Online (Sandbox Code Playgroud)

显然,在这个例子中,将传递一个代码指向函数的指针.

我想要相当于这个:

void MyFunction_2 (std::tuple<int, bool, double>  &params);
Run Code Online (Sandbox Code Playgroud)

有可能这样做吗?

son*_*yao 35

decltype (MyFunction_1)会给你类型MyFunction_1(即函数类型std::tuple<int, bool, double> ()),你需要模拟一个函数调用 1(通过添加())来获得返回类型(即std::tuple<int, bool, double>),例如

void MyFunction_2 (decltype (MyFunction_1()) &params);
//                                       ^^
Run Code Online (Sandbox Code Playgroud)

1表达式在编译时计算,实际上不会在运行时调用该函数.

  • 另一种方法(可能更简单):[std :: result_of](https://en.cppreference.com/w/cpp/types/result_of) (9认同)
  • @ Ptaq666这是一个答案,应该作为一个发布. (5认同)
  • 因为....?FGITWing很好,但是答案应该向OP和未来的读者解释*为什么*添加两个字符可以解决这里的问题. (2认同)
  • "你需要在`decltype()中模拟函数调用吗?"这是一个更好的措辞吗?:P (2认同)

Bat*_*eba 16

类型MyFunction_1不是std::tuple<int, bool, double>-非正式你可以把它看成是一个函数指针.事实上,&MyFunction_1 衰退本身,当然是一个指针.

所以decltype(MyFunction_1)不是你想要的.

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