Fondamentalement, j'ai beaucoup de struct différemment typés comme ceci:Puis-je extraire des membres de la classe struct ou public à l'aide d'un modèle?
typedef struct
{
char memberA;
int memberB;
...
} tStructA;
Est-il possible d'utiliser un modèle pour obtenir/extraire un membre arbitraire du struct? Dans pseudocode, je cherche quelque chose comme ceci:
/*This is pseudocode!*/
template <typename STRUCT_TYPE, typename MEMBER_TYPE, membername NAME>
class cMemberExtractor
{
public:
MEMBER_TYPE
extract(const STRUCT_TYPE* pStruct) const
{
return pStruct->NAME;
}
};
L'idée est derrière d'utiliser le modèle comme celui-ci:
/*somewhere*/
void
producer()
{
//produce update
tStructA* pUpdate=new tStructA;
...
//send update to receivers
emit(pUpdate);
}
/*elsewhere*/
void
consumer(const tStructA* pUpdate)
{
//extract data
int data=cMemberExtractor<tStructA,int,memberB>().extract(pUpdate);
//process data
...
}
Merci pour votre aide!
Je pense que non, parce que C++ n'a pas de vraies métadonnées d'objet à l'exécution, mais je pourrais ne pas être clair sur ce que vous demandez. Il pourrait également y avoir un hack préprocesseur horrible pour cela. –
Quel est le problème avec 'int data = pUpdate-> memberB;'? – kennytm
@Travis: Qui parlait de l'exécution? – sbi