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 vonAddValuewerden 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)

Antworten auf die Frage(2)

Ihre Antwort auf die Frage