C ++ Typname des Elements variablen
Frage
Ist es möglich, Typnamen einer Membervariable zu bekommen? Zum Beispiel:
struct C { int value ; };
typedef typeof(C::value) type; // something like that?
Danke
Lösung
Nicht in C ++ 03. C ++ 0x einleitet decltype
:
typedef decltype(C::value) type;
Einige Compiler haben eine typeof
Erweiterung, aber:
typedef typeof(C::value) type; // gcc
Wenn Sie in Ordnung mit Boost, sie haben eine Bibliothek für sie:
typedef BOOST_TYPEOF(C::value) type;
Andere Tipps
Nur wenn Sie sind gut mit der Verarbeitung der Typ in einer Funktion
struct C { int value ; };
template<typename T, typename C>
void process(T C::*) {
/* T is int */
}
int main() {
process(&C::value);
}
Es wird nicht mit Referenzdaten-Mitgliedern arbeiten. C ++ 0x ermöglicht decltype(C::value)
dass leichter zu tun. Nicht nur das, sondern erlaubt es decltype(C::value + 5)
und andere Phantasie Ausdruck Sachen im decltype
. Gcc4.5 bereits unterstützt.
Mai nicht genau das, was Sie suchen, aber eine möglicherweise bessere Lösung auf lange Sicht:
struct C {
typedef int type;
type value;
};
// now we can access the type of C::value as C::type
typedef C::type type;
Dies ist nicht genau das, was Sie wollen, aber es erlaubt uns, die Umsetzung Art von C::value
zu verstecken, damit wir es später ändern können, das ist, was ich vermute, du bist nach.
Es hängt davon ab, was man damit tun müssen, aber Sie würden so etwas wie:
#include <iostream>
using namespace std;
struct C
{
typedef int VType;
VType value;
};
int main()
{
C::VType a = 3;
cout << a << endl;
}