C ++ Typename da variável de membro
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
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;
}