Pergunta

É possível obter o tipo de nome de uma variável de membro? Por exemplo:

struct C { int value ; };

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

Obrigado

Foi útil?

Solução

Não em C ++ 03. C ++ 0x apresenta decltype:

typedef decltype(C::value) type;

Alguns compiladores têm um typeof extensão, no entanto:

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

Se você está bem com Boost, eles têm um biblioteca para isso:

typedef BOOST_TYPEOF(C::value) type;

Outras dicas

Somente se você estiver bem com o processamento do tipo em uma função

struct C { int value ; };

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

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

Não funcionará com membros de dados de referência. C ++ 0x permitirá decltype(C::value) para fazer isso mais facilmente. Não apenas isso, mas permite decltype(C::value + 5) e qualquer outra coisa de expressão sofisticada dentro do decltype. O GCC4.5 já suporta.

Pode não ser exatamente o que você está procurando, mas uma solução possivelmente melhor a longo prazo:

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

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

Isso não é exatamente o que você deseja, mas nos permite ocultar o tipo de implementação de C::value Para que possamos alterá -lo mais tarde, que é o que eu suspeito que você esteja procurando.

Depende do que você precisa fazer com isso, mas você faria algo como:

#include <iostream>
using namespace std;

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

int main()
{
    C::VType a = 3;
    cout << a << endl;
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top