【发布时间】:2016-02-20 05:24:36
【问题描述】:
这与代码生成有关。
我有一个从模型生成的类 A,其中我有两个函数 f 的重载,如下所示:
class A
{
public:
void f(int a){}
void f(int a, int b){}
}
然后我有一个独立的系统部分,它不是从模型生成的,而是用手工制作的 C++ 编写的。在这里,我想访问对象上的函数f。从模型中,我可以将数据传递给系统的手工制作部分,但反过来不行,因为在我构建手工制作的代码时生成的文件不可用于编译。
我的想法是将函数指针从模型传递到我需要的地方。到目前为止,据我所知,这包括 static_cast 以解决重载问题,然后我可以将指向函数的指针作为参数传递给其他手工制作的函数。
用于将指针传递给系统手工部分的函数声明如下(此处A 未知):
void passPointer(int, void (*f)(int, int));
我的演员表和函数调用如下所示:
handCraftedObject->passPointer(17, static_cast<void (A::*)(int, int)> (&A::f) );
我的编译错误是:
: no known conversion for argument 2 from 'void (A::*)(int, int)' to 'void (*)(int, int)
我希望这并不意味着我必须知道声明传递函数指针的函数所在的类A。这在我的系统中是不可能的。
【问题讨论】:
-
函数指针和成员(函数)指针不一样,第二个需要类的实例。
-
方法
A::f必须变成静态,否则你必须更改签名...
标签: c++ code-generation function-pointers member-function-pointers