Point* p = cont.Get( 10, &Point::GetX );
p = cont.Get( 20, &Point::GetX );
p = cont.Get( 30, &Point::GetX );
return 0;
}
Dans le cas réel, je dois travailler avec des structures C qui n'ont
pas de fonctions membres. Est-il possible d'utiliser une astuce basée
sur les "templates" afin de sélectionner au "run-time" la variable
membre que l'on veut utiliser pour faire la comparaison?
Je sais qu'il existe des solutions, comme définir un "functor", passer
un "callback", dériver une classe, etc, mais j'aimerais éviter d'avoir
à écrire du code spécifique à chaque utilisation.
Exemple de ce que j'aimerais faire (je sais que ce n'est pas du code
C++ valide, c'est juste pour donner une idée de ce que j'ai en tête!)
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Loïc Joly
S?bastien C?t? wrote:
Dans le cas réel, je dois travailler avec des structures C qui n'ont pas de fonctions membres. Est-il possible d'utiliser une astuce basée sur les "templates" afin de sélectionner au "run-time" la variable membre que l'on veut utiliser pour faire la comparaison?
Je sais qu'il existe des solutions, comme définir un "functor", passer un "callback", dériver une classe, etc, mais j'aimerais éviter d'avoir à écrire du code spécifique à chaque utilisation.
Exemple de ce que j'aimerais faire (je sais que ce n'est pas du code C++ valide, c'est juste pour donner une idée de ce que j'ai en tête!)
Bin, je me demande si en fait ce que tu souhaites faire n'est pas du code C++ valide à la syntaxe près dans la déclaration de fonction.
Je n'ai jamais utilisé ça, donc je dit peut-être une bétise, mais j'ai l'impression que non.
Voici un exemple extrait de la norme et nettoyé : class X { public: int a; };
int X::* pmi = &X::a;
void f() { X obj; //... obj.*pmi = 7; // assign 7 to an integer }
{ for ( size_t idx = 0; idx < _cltn.size(); ++idx ) if ( _cltn[idx].*member == value ) /* !!! */ return &_cltn[idx];
return static_cast<T*>( 0 ); } };
-- Loïc
S?bastien C?t? wrote:
Dans le cas réel, je dois travailler avec des structures C qui n'ont
pas de fonctions membres. Est-il possible d'utiliser une astuce basée
sur les "templates" afin de sélectionner au "run-time" la variable
membre que l'on veut utiliser pour faire la comparaison?
Je sais qu'il existe des solutions, comme définir un "functor", passer
un "callback", dériver une classe, etc, mais j'aimerais éviter d'avoir
à écrire du code spécifique à chaque utilisation.
Exemple de ce que j'aimerais faire (je sais que ce n'est pas du code
C++ valide, c'est juste pour donner une idée de ce que j'ai en tête!)
Bin, je me demande si en fait ce que tu souhaites faire n'est pas du
code C++ valide à la syntaxe près dans la déclaration de fonction.
Je n'ai jamais utilisé ça, donc je dit peut-être une bétise, mais j'ai
l'impression que non.
Voici un exemple extrait de la norme et nettoyé :
class X {
public:
int a;
};
int X::* pmi = &X::a;
void f()
{
X obj;
//...
obj.*pmi = 7; // assign 7 to an integer
}
Dans le cas réel, je dois travailler avec des structures C qui n'ont pas de fonctions membres. Est-il possible d'utiliser une astuce basée sur les "templates" afin de sélectionner au "run-time" la variable membre que l'on veut utiliser pour faire la comparaison?
Je sais qu'il existe des solutions, comme définir un "functor", passer un "callback", dériver une classe, etc, mais j'aimerais éviter d'avoir à écrire du code spécifique à chaque utilisation.
Exemple de ce que j'aimerais faire (je sais que ce n'est pas du code C++ valide, c'est juste pour donner une idée de ce que j'ai en tête!)
Bin, je me demande si en fait ce que tu souhaites faire n'est pas du code C++ valide à la syntaxe près dans la déclaration de fonction.
Je n'ai jamais utilisé ça, donc je dit peut-être une bétise, mais j'ai l'impression que non.
Voici un exemple extrait de la norme et nettoyé : class X { public: int a; };
int X::* pmi = &X::a;
void f() { X obj; //... obj.*pmi = 7; // assign 7 to an integer }