gpt4 book ai didi

c++ - 如何将函数指针作为参数传递给重载的成员函数

转载 作者:行者123 更新时间:2023-11-28 02:16:55 26 4
gpt4 key购买 nike

这与代码生成有关。

我有一个从模型生成的类 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,其中声明了传递函数指针的函数。这在我的系统中是不可能的。

最佳答案

成员函数指针与函数指针的类型不同,不能转换成它。最简单的方法是使用 boost/std(C++11) bindfunction

void passPointer(int, const std::function<void(int, int)>&);

不仅仅是

handCraftedObject->passPointer
(
17, std::bind(static_cast<void (A::*)(int, int)> (&A::f), std::ref(a_instance),
std::placeholders::_1, std::placeholders::_2)
);

另外你不能使用boost/C++11,你可以让函数f static,然后一切正常。

关于c++ - 如何将函数指针作为参数传递给重载的成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33780680/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com