L'objectif est de faire en sorte que la variable membre _AddValue
point sur le CreateFirstValue
lors de l'initialisation de la classe et après la première invocation de la fonction AddValue
tous les futurs appels à cette fonction invoqueront CreateAnotherValue
.
Auparavant, je n'avais qu'un seul AddValue
avec un contrôle conditionnel pour déterminer la fonction à appeler. Cependant, j'ai l'impression que cette implémentation est défectueuse parce que la fonction if
se produira à chaque fois et il semble qu'un pointeur de fonction serait utile ici.
Un exemple :
class Foo
{
private:
int _value;
void (*_AddValue)(int value); // Pointer to function member variable
void CreateFirstValue(int value)
{
_value = value;
_AddValue = &CreateAnotherValue;
}
void CreateAnotherValue(int value)
{
// This function will create values differently.
_value = ...;
}
public:
// Constructor
Foo()
: _value(0), _AddValue(CreateFirstValue)
{
}
AddValue(int value) // This function is called by the user.
{
_AddValue(value);
}
};
Le code ci-dessus n'est pas le code réel, juste un exemple de ce que j'essaie d'accomplir.
En ce moment, j'obtiens une erreur : argument of type void (BTree::)(int) does not match void (*)(int)