Erstellen einer Funktionsvariablen für Klassenmemberzeiger, die auf eine nicht statische Klassenmemberfunktion verweist
Das Ziel ist es, die Mitgliedsvariable zu haben_AddValue
Zeigen Sie auf denCreateFirstValue
Funktion bei der Klasseninitialisierung und nach dem ersten Aufruf vonAddValue
werden alle zukünftigen Aufrufe dazu aufgerufenCreateAnotherValue
.
Zuvor hatte ich nur eine SingleAddValue
Funktion mit einer bedingten Prüfung, um festzustellen, welche Funktion aufgerufen werden soll. Ich bin jedoch der Meinung, dass die Implementierung dadurch fehlerhaft istif
Die Überprüfung wird jedes Mal durchgeführt und es scheint, als wäre hier ein Funktionszeiger von Vorteil.
Ein Beispiel:
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);
}
};
Der obige Code ist nicht der eigentliche Code, sondern nur ein Beispiel für das, was ich erreichen möchte.
Im Moment erhalte ich eine Fehlermeldung:argument of type void (BTree::)(int) does not match void (*)(int)