2010-07-08 15 views
6

¿Cómo puedo determinar el tipo de devolución de una función genérica miembro?C++ plantilla determinar función return tipo

template<class E> 
    struct result<E> { 
     // E has member function data(), I need to know its return type 
     typedef typename &E::data type; 
    }; 

es posible hacerlo de forma genérica? Sé que hay boost:: result_of pero a mis fines carece de especializaciones (si entendí correctamente, el tipo de devolución debe ser especializado). impulsar la implementación sería genial.

+2

Probablemente, no necesitas esa magia en absoluto. Intenta usar 'E :: value_type *' o 'E :: pointer'. Si tiene 'data()' es probable que sea un contenedor y proporcione typedefs públicos. –

+0

@Johannes gracias. en realidad estaba tratando de escribir wrappers para trabajar de forma transparente con ublas y otras cosas. Lamentablemente, la interfaz ublas data() es un poco no estándar (tipo_arquitectura), así que terminé especializándome por separado. – Anycorn

Respuesta

4

El operador no estándar typeof de GCC puede hacer esto, al igual que Boost.TypeOf.

+0

que parece funcionar, siempre que no haya funciones sobrecargadas. ¿Sabe cómo tratar el caso en el que hay 2 funciones (una tiene calificador const) – Anycorn

+0

Tendría que encasillar la función en el tipo const o non const antes de usarlo. Obtienes el mismo problema con boost :: bind. – bradgonesurfing

+0

@brad gracias. ¿No necesito saber el tipo de devolución antes de escribir el elenco? ¿Puedes dar un ejemplo? – Anycorn

3

Si está utilizando VS2010 o GCC 4.3 al menos, puede utilizar la nueva palabra clave decltype de C++ 0x.

Cuestiones relacionadas