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

Était-ce utile?

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;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top