我会尽我所能,尽可能清楚地解释这一点。
我的示例目前涉及 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():“必须使用 '. ' 或 '-> ' 在 ... 中调用指向成员函数的指针”