Cette question est plus ou moins similaire à cette Extend an existing API: Use default argument or wrapper function? mais suffisamment différente.
S'il vous plaît lire.Combien de frais généraux dois-je attendre d'une fonction d'emballage
J'ai une classe Foo qui a la fonction oldFunc qui est utilisée dans plusieurs parties de mon programme.
Afin d'introduire un nouveau comportement à Foo j'ai implémenté newFunc et l'ai rendu privé de sorte que
les appelants à oldFunc continuent à utiliser la même API mais peuvent obtenir le nouveau comportement s'ils définissent un drapeau par appelant la fonction setUseType().
pseudo-code suivant:
class Foo
{
public:
Foo(){ useNew = false;}
void setUseType(bool useType){ useNew = useType;}
std::string oldFunc(int r)
{
if(useNew)
{
return newFunc(r);
}
return std::string("Some value after doing some work");
}
private:
std::string newFunc(int r){ return std::string("Some value after doing some work");}
bool useNew;
};
QuestionoldFunc
est appelée plusieurs fois (en millions de fois) à l'intérieur d'une boucle.
Combien de frais généraux dois-je attendre de l'emballage newFunc
à l'intérieur oldFunc
. En théorie, si et newFunc
est implicite dans la mise en œuvre, y a-t-il une raison de s'attendre à ce que les appels avec un indicateur défini UseType(true)
soient plus lents?
cela semble être une manière fragile d'implémenter le versioning ...? –
Est-ce que 'useNew' change au moment de l'exécution? Si ce n'est pas le cas, vous pouvez en faire une constante à la compilation et vous en débarrasser complètement. –
@Kerrek SB 'useNew' est un paramètre d'exécution – user841550