C ++ nomtype de variable membre
Question
Est-il possible d'obtenir typename d'une variable de membre? Par exemple:
struct C { int value ; };
typedef typeof(C::value) type; // something like that?
Merci
La solution
Non en C ++ 03. C ++ 0x introduit decltype
:
typedef decltype(C::value) type;
Certains compilateurs ont une extension typeof
, cependant:
typedef typeof(C::value) type; // gcc
Si vous êtes d'accord avec Boost, ils ont un bibliothèque pour elle:
typedef BOOST_TYPEOF(C::value) type;
Autres conseils
Seulement si vous êtes bien avec le traitement du type dans une fonction
struct C { int value ; };
template<typename T, typename C>
void process(T C::*) {
/* T is int */
}
int main() {
process(&C::value);
}
Il ne fonctionnera pas avec les membres de données de référence. C ++ 0x permettra decltype(C::value)
de le faire plus facilement. Non seulement cela, mais il permet decltype(C::value + 5)
et toute autre fantaisies d'expression dans le decltype
. Gcc4.5 soutient déjà.
Ne peut pas être exactement ce que vous cherchez, mais une solution peut-être mieux à long terme:
struct C {
typedef int type;
type value;
};
// now we can access the type of C::value as C::type
typedef C::type type;
Ce n'est pas exactement ce que vous voulez, mais il ne nous permet de cacher le type de C::value
de mise en œuvre afin que nous puissions changer plus tard, ce qui est ce que je pense que vous êtes après.
Cela dépend de ce que vous devez faire avec elle, mais vous feriez quelque chose comme:
#include <iostream>
using namespace std;
struct C
{
typedef int VType;
VType value;
};
int main()
{
C::VType a = 3;
cout << a << endl;
}