我会尽我所能,尽可能清楚地解释这一点。
我的示例目前涉及 3 个不同的类。
- 我的模型课(让我们称之为
MyModel.cpp
) - MyModel 具有 (
MyData.cpp
)对象的我的数据类 - 我的撤消重做类修改了我的模型(
MyModelUR.cpp
)
MyModel
有一个MyData
对象。 MyData
包含一堆双打,每个都有自己的 get 和 set 功能。我的系统的工作方式是通过调用redo()
in来调用 setter MyModelUR
。当检测到更改时调用此redo()
函数。MyModel
不过,这超出了问题的范围。
MyModelUR
有 3 个函数,一个构造函数,它需要一些参数,undo()
并且redo()
不允许使用任何参数。
发生的情况是,我想MyModel
将所需设置器的函数指针传递MyData
给MyModelUR
.
因此,这意味着 for 的构造函数MyModelUR
需要将函数指针作为 arg,然后将其存储在私有全局变量中。到目前为止,我有这样的事情......
MyModelUR::MyModelUR(MyModel* model, double newValue, void (*function)(double))
{
Model = model;
NewValue = newValue;
//FunctionToCall is a void*
FunctionToCall = &function;
}
现在,在我的redo()
函数中,我想使用FunctionToCall
......我正在尝试这样做,但它不起作用,只是给我编译错误......
MyModelUR::redo()
{
Model->data()->FunctionToCall(NewValue);
}
我想以这种方式实现它,所以我不需要每个 double in的 X 个undo()
/函数。redo()
MyData
感谢您的帮助和建议,但在考虑回复时我有一些限制,例如,由于我有一些其他限制,我想使用此架构,并且我不能使用 Boost 库。
TLDR;我想调用一个 void 函数指针,该指针在对象上调用的单独类中采用双精度。
谢谢!
编辑:在下面的评论之后,这就是我正在使用的......
MyModelUR::MyModelUR(MyModel* model, double newValue, void (MyModel::*function)(double)) :
Model(model),
NewValue(newValue),
FunctionToCall(function)
{
}
void MyModelUR::redo()
{
MyData data = Model->data();
data.*FunctionToCall(NewValue);
}
但是,这会在第二行代码中引发错误redo()
:“必须使用 '. ' 或 '-> ' 在 ... 中调用指向成员函数的指针”