Comment calculer le décalage d'un membre de la classe au moment de la compilation?

Donné une définition de classe en C++

class A
{
  public:
    //methods definition
    ....

  private:
    int i;
    char *str;
    ....
}

Est-il possible de calculer le décalage d'un membre de la classe au moment de la compilation à l'aide de C++ modèle de méta-programmation? La classe n'est pas de la GOUSSE, et peut avoir des méthodes virtuelles, primitif et les données de l'objet membre.

Que voulez-vous dire exactement par "décalage d'un membre de la classe"? Voulez-vous dire combien d'octets que vous avez à ajouter à un pointeur vers une instance de la classe (après, disons, reinterpret_cast'ing à char *) pour obtenir le membre? Si oui, ne serait pas simple soustraction dites-vous?
Vous pouvez utiliser offsetof(A, i) si qui ont été définis pour ces types. Consultez votre documentation du compilateur pour voir si elle est.
Voici le lien pour un exemple de code qui utilise offsetof().
et Hindol: en Raison de l'étendue de la fonctionnalité des structures en C++, dans cette langue, l'utilisation de offsetof est limitée aux "POD types", qui pour les classes, correspond plus ou moins à la C concept de struct (bien que non-classes dérivées uniquement avec des publics non-virtuel fonctions de membre et avec aucun constructeur et/ou le destructeur est aussi considérée comme POD).
D'accord, donc le subjonctif de l'humeur dans ma phrase, "si que ont été défini."

OriginalL'auteur Jun Yuan | 2012-11-01