Configuration: Il y a une classe classA
, et une classe classB
qui utilise classA
. Malheureusement, lors de la programmation classB
, je ne sais pas si classA
aura un certain membre someMember
ou non. En fonction de cela, une fonction membre someFunction
dans classB
doit être implémentée soit dans l'un ou l'autre sens. Comme l'one-way utilise someMember
, il est important que cette instance de fonction n'est pas compilée dans le cas someMember
n'est pas un membre de classA
.C++ 98: Fournir différentes implémentations de fonction, en fonction de l'existance d'un membre
Question: En dehors des macros/définit, quelle est la meilleure solution pour cela en C++ 98?
MWE:
class classA
{
public:
// c'tor
classA()
{
//someMember = 3;
};
// does not have the member "someMember"
//int someMember;
};
class classB
{
public:
// only compile this function if "someMember" is a member of classB
int someFunction(classA a)
{
return a.someMember;
}
// ...and compile this one otherwise
int someFunction(classA a)
{
return 2;
}
};
// --- just to have an MWE: ---
#include<iostream>
int main()
{
classA a;
classB b;
cout << b.someFunction(a);
return 0;
}
"Je ne sais pas si classA aura un certain membre ou non" n que 'classB' est un template dans votre code réel et' classA' est un paramètre template? – TartanLlama
Non, cela signifie qu'il existe différentes versions de 'classA', et selon la version de' classA' que j'utilise, il y aura 'someMember' ou pas. C'est un problème de compatibilité et de configuration. 'classA' vit dans un composant logiciel différent qui pourrait être combiné dans différentes versions avec mon composant logiciel (' classB'). – matheburg
https://fr.wikibooks.org/wiki/More_C%2B%2B_Idioms/Member_Detector – acraig5075