gpt4 book ai didi

c++ - 将 C++ 成员函数分配给 C 函数指针

转载 作者:太空宇宙 更新时间:2023-11-04 02:29:44 25 4
gpt4 key购买 nike

我有一个 C 库,其结构如下:

   struct A {
void process(){
doProcess();
};
void (*doProcess)(void);
}

现在,我有一个类似的类

class B
{
public:
B(): a(){
a.doProcess = print();
}
void print(){
// do anything
}
private:
A a;
}

这行不通,因为 print 是一个成员函数,必须在 B 的对象上调用。因此我尝试使用 boost::bind 函数:

a.doProcess = boost::bind(&A::print, this)

这也不行。

我还尝试修改 C 库并将函数指针定义替换为 boost::function 定义。但是随后编译器提示找不到包含在“boost/function.h”中的“”。

是否有一种(简单/boost )方法可以将成员函数分配给结构的指针?

最佳答案

你根本无法做到这一点。成员函数有一个隐含的 this 参数,它是一个指向调用该函数的对象的指针。不将 B* 作为参数的函数将永远无法在特定的 B 实例上运行,并且不将此点作为其第一个参数的函数永远不会具有与类方法相同的签名。有关此问题的更多详细信息和解决方法示例,请阅读:

https://isocpp.org/wiki/faq/pointers-to-members#memfnptr-vs-fnptr

注意答案底部关于如何以这种方式使用静态成员函数的注释。

纯 C++ 项目可以使用 std::function 和 std::bind 来实现您所要求的,但是 C++ 项目使用的 C 库不能使用这些类型。

关于c++ - 将 C++ 成员函数分配给 C 函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45142031/

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