目标是在类初始化时让成员变量_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)