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_