2010-11-25 6 views
2

J'ai trouvé la réponse pour C Structs et les classes C# mais je suis revenu les mains vides concernant C++. EDIT: En C, vous ne pouvez pas. En C#, il s'agit de la méthode GetProperties().Puis-je faire une boucle sur les attributs (publics) d'une classe C++?

Le contexte: J'ai une classe C++ avec des attributs publics (disons un point avec X, Y, Z). Je veux envoyer ces attributs via UDP à un client Java. Mon idée était de créer un buffer octet (char *) avec les trois attributs (je m'occupais des problèmes d'endianness).

prepareForUdp(char * buffer) 
{ 
    int offset = 0; 
    int offsetValue = 4; 
    char tempBuffer[16]; 

    memcpy(tempBuffer, &X_, sizeof(X_)); 
    offset = offset + offsetValue; 
    memcpy(tempBuffer + offset, &Y_, sizeof(Y_)); 
    offset = offset + offsetValue; 
    memcpy(tempBuffer + offset, &Z_, sizeof(Z_)); 
    offset = offset + offsetValue; 

    memcpy(buffer, tempBuffer, sizeof(buffer)); 
} 

Je veux que mon interface à évolutive, parce que le point peut obtenir un quatrième, cinq, ou un n-ième dimension, et je veux que ma méthode prepareForUdp() à être (relativement) générique.

Ma question est: comment boucler (ou itérer) mes attributs?

+1

quelle est la méthode pour C? – lijie

+1

Peut-être que si vous avez posté votre 'réponse' pour les structures C, cela peut éclairer ce que vous considérez comme une réponse. Je ne vois pas comment vous pourriez le résoudre en C et ne pas être capable de faire la même chose en C++ – Jamie

+0

Je suis désolé, Jamie. La réponse pour C était "Vous ne pouvez pas" ... Je vais éditer mon premier post. –

Répondre

5

Il n'y a pas de réflexion en C++. Donc, la réponse est, vous ne pouvez pas :)

+0

Y a-t-il une solution de contournement? –

+1

@Isaac: Pour exactement ce que vous voulez faire, non, il n'y en a pas. Vous ne pouvez pas itérer, de quelque façon que ce soit, à travers des membres séparés de la classe. Vous pouvez itérer à travers les octets si –

+0

C'est interessant! Pouvez-vous me montrer un article ou un tutoriel pour le faire? –

2

Voici un article on reflection et comment faire face au fait que C++ ne le fait pas.

+0

Merci, c'était instructif! –

+0

Bien que cela puisse théoriquement répondre à la question, [il serait préférable] (// meta.stackoverflow.com/q/8259) d'inclure les parties essentielles de la réponse ici, et de fournir le lien pour référence. – Mgetz