我最近在C++中遇到了关于函数指针的行为,我无法完全理解.我向谷歌寻求帮助以及一些经验丰富的同事,但即使他们也无能为力.
以下代码展示了这种神秘行为:
class MyClass{
private:
int i;
public:
MyClass(): i(0) {}
MyClass(int i): i(i) {}
void PrintText() const { std::cout << "some text " << std::endl;}
};
typedef void (*MyFunction) (void*);
void func(MyClass& mc){
mc.PrintText();
}
int main(){
void* v_mc = new MyClass;
MyFunction f = (MyFunction) func; //It works!
f(v_mc); //It works correctly!!!
return 0;
}
Run Code Online (Sandbox Code Playgroud)
所以,首先我定义一个稍后将使用的简单类(特别是它的成员方法PrintText).然后,我将名称对象定义void (*) (void*)为MyFunction- 指向具有一个void*参数且不返回值的函数的指针.
之后,我定义func()了接受MyClass对象引用并调用其方法的函数PrintText.
最后,魔术发生在主要功能上.我为MyClass返回指针的新对象动态分配内存void* …