我试图将一个类函数的指针作为变量发送给另一个类。我试图将这两个类分开,以便我可以重用代码而不必在将来进行编辑。将指针指向类函数以指向函数
我编写在Windows 7上,使用Visual Studio 2015年
DATASTRUCT dataItem = {0, 1, 0, 1, dataText, parentClass::doSomething};
childClass.addItem(dataItem); //childClass is initiated as a member of parentClass
在别处:
typedef struct dataStruct{
double min_x;
double max_x;
double min_y;
double max_y;
GLTEXT label; //custom struct for text information
void(*function)(void);
}DATASTRUCT;
我想childClass能够去了解其业务,并检查了某些参数,当childClass完成时,我希望它从parentClass调用doSomething,但实际上并不知道它是嵌套类。
编译过程中我得到的错误是:
无效(父类:: )()不能用于初始化的无效()实体()。
我能够定义一个标准函数并调用它,但这并不是每个parentClass都唯一的,然后我必须指定我所指的是哪个parentClass :: doSomething。
我发现最简单的办法是重新定义指针childClass运作为void(父类:: *)(),这正是我想要的,但不是如何我想它。
有了这个说法,我不知道在哪里拿这个,有没有另一种方式?相似的东西?
编辑:
如果可能的话,我将如何明确送我childClass正确解读动态函数指针所需要的信息。
所以......“父类::”提前
childClass.addItem(classInformation, dataItem, &parentClass::doSomething);
或者不接收端总是有知道的吗?那么现在是使用void指针的好时机吗?
我是追着我自己的尾巴还是这是去某个地方?
编辑:
这样的事情看起来很危险,但在这里。
childClass.addItem(classInformation, dataItem, static_cast<void*>(&parentClass::doSomething));
childClass::callParent(classInformation, void*function){
static_cast<classInformation.something*>(function)();
}
什么是“classInformation.something”在这种情况下?
成员功能需要一个对象,他们将操作。你如何指定你想要访问哪一个? –
顺便说一句,你真的应该使用'&parentClass :: doSomething'。只有MSVC会原谅你错过'&',那只是因为他们试图与VC++ 6进行bug兼容。 – MSalters
@MSalters我会记住这一点,我曾经在c中添加&之前的函数指针,但是我开始在C++中出现类似指针的奇怪错误。到目前为止,我注意到Visual Studio似乎更喜欢没有。 – Jarred