valores usar tipos retornan que parametros lenguaje funciones funcion ejemplos con como c++ c++11 decltype

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) &params);

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> &params);

¿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()) &params); // ^^

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.