2010-02-10 9 views
4

Je souhaite transmettre le nom d'une variable membre. Je pensais que je pouvais le faire parTransmettre des variables membres d'une classe spécifiée

template <typename T::*> 
void SetVal(T::* newval) 
{ 

}; 

Cela ne fonctionne évidemment pas, mais j'espère obtenir ce que je suis en train de faire. Je veux être en mesure de définir une certaine variable membre de la classe modélisée.

+0

Avez-vous besoin de passer le nom comme une chaîne, comme dans SetVal ("age", 3)? – maxpolk

+0

Le nom est-il connu au moment de la compilation, ou est-il résolu d'une manière ou d'une autre au moment de l'exécution? –

Répondre

2

Vous pouvez toujours mettre la constante définie par la compilation comme argument de modèle. Donc, ici, ce serait:

template <typename T, typename R, R T::* member> 
R& SetVal(T& t, const R& value) 
{ 
    t.*member = value; 
    return t.*member; 
} 

struct A 
{ 
    int a; 
}; 

int main() 
{ 
    A a; 
    SetVal<A,int,&A::a>(a, 10); 
    return 0; 
} 
Questions connexes