una - todas las funciones de c++




La forma más sencilla de determinar el tipo de retorno de la función (2)

Lo más simple y conciso es probablemente:

template <typename R, typename... Args>
R return_type_of(R(*)(Args...));

using ReturnTypeOfFoo = decltype(return_type_of(foo));

Tenga en cuenta que esto no funcionará para objetos de función o punteros a funciones miembro. Solo funciones, que no están sobrecargadas o plantillas, o noexcept .

Pero esto puede extenderse para admitir todos esos casos, si así lo desea, agregando más sobrecargas de return_type_of .

Dada una función muy simple, pero larga, como:

int foo(int a, int b, int c, int d) {
    return 1;
}

// using ReturnTypeOfFoo = ???

¿Cuál es la forma más sencilla y concisa de determinar el tipo de retorno de la función ( ReturnTypeOfFoo , en este ejemplo: int ) en el momento de la compilación sin repetir los tipos de parámetros de la función (solo por su nombre, ya que se sabe que la función no tiene sobrecargas adicionales) )?


No sé si es la forma más sencilla (si puede usar C ++ 17 seguramente no lo es: vea la respuesta de NathanOliver) pero ... ¿qué hay de declarar una función de la siguiente manera?

template <typename R, typename ... Args>
R getRetType (R(*)(Args...));

y usando decltype() ?

using ReturnTypeOfFoo = decltype( getRetType(&foo) );

Observe que getRetType() solo se declara y no se define porque se llama solo decltype() , por lo que solo el tipo devuelto es relevante.





compile-time