如何使用类实例成员函数指针填充函数指针成员
How to fill a function pointer member with class instance member function pointer?
有一个C API,我需要创建一个C++对象来扩展它,如下所示:
struct OldCInterface {
void (*doStuff)();
};
struct NewCXXBaseClass : protected OldCInterface {
virtual void doStuff();
virtual ~NewCXXBaseClass();
};
如果可能的话,如何将指向 CXX doStuff 的实例指针放入构造函数中的 C 接口中,如果我们有 Base 子级,它指向重载?
void (*doStuff)()
如果函数指针,而&NewCXXBaseClass::doStuff
的类型为 void (NewCXXBaseClass::*)()
,即指向成员函数的指针。它们不兼容。通常,它们甚至不是相同的大小(sizeof(void (*)()) != sizeof(void (NewCXXBaseClass::*)())
)。这么说,以下是正确的
struct OldCInterface {
void (NewCXXBaseClass::*doStuff)();
};
但是由于您的初衷是使用一些旧的 C 代码。这可能行不通。最好的办法是创建一个静态成员函数,该函数调用某个对象的虚拟成员函数。一例证:
struct Proxy {
static NewCXXBaseClass* s_p_;
static void DoStuff() {
s_p_->DoStuff();
}
};
&Proxy::DoStuff
的类型为 void(*)()
,可用于需要函数指针的位置。然后,您可以执行以下操作:
OldCInterface c_interface = {&Proxy::DoStuff};
相关文章:
- 如果基类包含双指针成员,则派生类的构造函数
- C++正确的指针成员初始化
- 是否可以使用智能指针成员设置具有另一个结构的结构?
- 为什么 operator() 处的指针成员不起作用?
- 更改队列指针成员的值需要在 C++ 中出现奇怪的错误
- 如何从另一个嵌套类中调用某个封闭类的嵌套类的函数指针成员的值?
- 结构对象的指针成员在传递给函数时被修改
- 参数的混合值,当我调用指针成员函数时
- 如何正确使用结构的共享指针成员?
- C++:私有类指针成员返回未定义的值
- 在函数中传递带有指针成员的结构是浅拷贝或深拷贝在 C 中
- 包含指针成员的嵌套结构
- 在 c++ 中,为什么 -> 被称为二进制中缀指针成员访问运算符?
- C++ 类指针成员行为奇怪(错误)
- 常量结构的指针成员
- 在类C++指针成员中
- 指针成员未在复制构造函数中初始化
- C++移动拥有指针成员的构造函数
- C++ 包含唯一指针成员变量的类的赋值运算符
- 如何使用 QPoint 指针成员对类进行排队和取消排队