目標は、メンバー変数がクラスの初期化時_AddValue
に関数を指すようにすることです。最初の の呼び出しの後、それ以降のすべての呼び出しで が呼び出されます。CreateFirstValue
AddValue
CreateAnotherValue
以前は、AddValue
どの関数を呼び出すかを決定するための条件付きチェックを備えた 1 つの関数しかありませんでした。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)