Est-il possible d'obtenir le typename d'une variable membre ? Par exemple :
struct C { int value ; };
typedef typeof(C::value) type; // something like that?
Merci
Est-il possible d'obtenir le typename d'une variable membre ? Par exemple :
struct C { int value ; };
typedef typeof(C::value) type; // something like that?
Merci
Pas dans C++03. C++0x introduit decltype
:
typedef decltype(C::value) type;
Certains compilateurs ont un typeof
l'extension, cependant :
typedef typeof(C::value) type; // gcc
Si vous êtes d'accord avec Boost, ils ont un bibliothèque pour cela :
typedef BOOST_TYPEOF(C::value) type;
Seulement si vous êtes d'accord pour traiter le 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);
}
Cela ne fonctionnera pas avec les membres des données de référence. C++0x permettra decltype(C::value)
pour le faire plus facilement. Non seulement cela, mais cela permet decltype(C::value + 5)
et toute autre expression fantaisiste à l'intérieur du decltype
. Gcc4.5 le supporte déjà.
Ce n'est peut-être pas exactement ce que vous recherchez, mais c'est peut-être une meilleure solution à 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 cela nous permet de masquer le type d'implémentation de la fonction C::value
afin que nous puissions le modifier ultérieurement, ce qui est ce que je soupçonne que vous recherchez.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.