2012-04-13 15 views
6

¿Cómo puedo obtener el tipo de devolución de una función miembro en el siguiente ejemplo?decltype para funciones miembro

template <typename Getter> 
class MyClass { 
    typedef decltype(mygetter.get()) gotten_t; 
... 
}; 

El problema, por supuesto, es que no tengo un objeto "mygetter" mientras defino MyClass.

Lo que estoy tratando de hacer es: estoy creando un caché que puede usar, como clave, lo que devuelve el captador.

Respuesta

11

No estoy muy seguro de lo que quiere, pero parece que mygetter se supone que es simplemente cualquier objeto del tipo Getter. Utilice std::declval para obtener un objeto, sin nada más (que sólo se puede utilizar para el tipo de deducción)

typedef decltype(std::declval<Getter>().get()) gotten_t; 
+0

oh bueno, yo nunca sabía sobre eso. ¡Eso es genial! Siempre utilicé 'Getter(). Get()' y asumí que 'Getter' era constructable por defecto. –

Cuestiones relacionadas