usar - funciones que retornan valores en c++
¿Es posible usar el tipo de retorno de función como un argumento en la declaración de otra función en C++? (3)
Quiero algo como esto:
std::tuple<int, bool, double> MyFunction_1 (void);
void MyFunction_2 (decltype (MyFunction_1) ¶ms);
Obviamente, en este ejemplo se pasaría un puntero de código para funcionar.
Quiero tener el equivalente de esto:
void MyFunction_2 (std::tuple<int, bool, double> ¶ms);
¿Es posible hacerlo?
El tipo de MyFunction_1 no es std::tuple<int, bool, double> - informalmente puedes pensar en él como un puntero a función. De hecho, &MyFunction_1 descompone y es un indicador.
Así que decltype(MyFunction_1) no es lo que quieres.
La solución es escribir decltype(MyFunction_1()) . El tipo de MyFunction_1() es std::tuple<int, bool, double> . Tenga en cuenta que esto no llama realmente a la función; Es como sizeof en este sentido.
decltype (MyFunction_1) le dará el tipo de MyFunction_1 (es decir, el tipo de función std::tuple<int, bool, double> () ), debe emular una función que llama a 1 (mediante la adición de () ) para obtener el tipo de retorno (ie std::tuple<int, bool, double> ), eg
void MyFunction_2 (decltype (MyFunction_1()) ¶ms);
// ^^
1 La expresión se evalúa en tiempo de compilación, en realidad no se llamará a la función en tiempo de ejecución.
using RetType = std::invoke_result<decltype(f)>::type;
Juega con él: https://gcc.godbolt.org/z/AE7lj_