我们的目标是让成员变量_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)