Создание переменной-функции-указателя на член класса, которая указывает на нестатическую функцию-член класса
Цель состоит в том, чтобы иметь переменную-член_AddValue
указать наCreateFirstValue
функция при инициализации класса и после первого вызоваAddValue
, все будущие вызовы к нему будут вызыватьCreateAnotherValue
.
Раньше у меня был только одинAddValue
функция с условной проверкой, чтобы определить, какую функцию вызывать. Тем не менее, я чувствую, что эта реализация имеет недостатки, потому что этоif
проверка будет происходить каждый раз, и кажется, что указатель на функцию здесь будет полезен.
Пример:
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);
}
};
Приведенный выше код не является реальным кодом, это просто пример того, что я пытаюсь выполнить.
сейчас я получаю сообщение об ошибке:argument of type void (BTree::)(int) does not match void (*)(int)