Creación de una variable de función de puntero de miembro de clase que apunta a una función de miembro de clase no estática
El objetivo es tener la variable miembro._AddValue
señala alCreateFirstValue
función en la inicialización de la clase y después de la primera invocación deAddValue
, todas las llamadas futuras a ella invocarán.CreateAnotherValue
.
Anteriormente, acababa de tener una solaAddValue
funciona con una verificación condicional para determinar a qué función llamar. Sin embargo, siento que la implementación es defectuosa porque esoif
la comprobación se producirá cada vez y parece que una función de puntero sería beneficiosa aquí.
Un ejemplo:
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);
}
};
El código anterior no es el código real, solo un ejemplo de lo que estoy tratando de lograr.
ahora mismo estoy recibiendo un error:argument of type void (BTree::)(int) does not match void (*)(int)