Pregunta

¿Es posible obtener nombre de tipo de una variable miembro? Por ejemplo:

struct C { int value ; };

typedef typeof(C::value) type; // something like that?

Gracias

¿Fue útil?

Solución

No en C ++ 03. C ++ 0x introduce decltype:

typedef decltype(C::value) type;

Algunos compiladores tienen una extensión typeof, sin embargo:

typedef typeof(C::value) type; // gcc

Si estás de acuerdo con Boost, que tienen un biblioteca para él:

typedef BOOST_TYPEOF(C::value) type;

Otros consejos

Sólo si estás bien con el tipo de procesamiento en una función

struct C { int value ; };

template<typename T, typename C>
void process(T C::*) {
  /* T is int */
}

int main() {
  process(&C::value); 
}

No va a trabajar con los miembros de datos de referencia. C ++ 0x permitirá decltype(C::value) para hacer eso más fácilmente. No sólo eso, sino que permite decltype(C::value + 5) y cualquier otra materia expresión de fantasía dentro de la decltype. Gcc4.5 ya es compatible con ella.

Puede que no sea exactamente lo que está buscando, pero posiblemente una solución mejor en el largo plazo:

struct C {
  typedef int type;
  type value;
};

// now we can access the type of C::value as C::type
typedef C::type type;

Esto no es exactamente lo que quiere, pero sí permite que escondamos el tipo de aplicación C::value para que más tarde puede cambiar, que es lo que sospecho que está buscando.

Depende de lo que tiene que hacer con él, pero que podría hacer algo como:

#include <iostream>
using namespace std;

struct C
{
    typedef int VType;
    VType value;
};

int main()
{
    C::VType a = 3;
    cout << a << endl;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top