使用C库的面向对象应用程序的方法

Approaches for an Object Orientated Application using C Libraries

本文关键字:应用程序 方法 面向对象 使用      更新时间:2023-10-16

My Application是一个使用OpenGL在C++中编写的图形应用程序。我需要使用一些库,如GLFW、GLEW和GLM

但是你不需要了解这些库或OpenGL就可以回答这个问题我因此多次遇到麻烦。例如,目前我必须传递一个函数,特别是对于窗口的调整大小事件,作为GLEW的参数。它需要一个静态函数,因为C中没有类。它揭示了我不能修改这个函数中的任何类成员的问题。(我无法处理它来提供一个指向该类的全局指针…)

由于我想保持面向对象的状态,我最近不得不多次重组我的代码。我现在很难过。

那么,对于使用没有面向对象支持的库来处理此类面向对象项目,有什么方法或指导方针吗

很多时候,C库允许您传入上下文指针/引用常量,通常类型为void *const void *。然后将此参数传递给您的回调。这是为了让您将状态线程传递到回调。您可以使用它来传递要使用的对象。

我已经看到这是通过声明一个静态成员函数来完成的,将其作为回调的目标,然后从中跳到一个适当的成员函数,类似于:

/*static*/ int Class::_callback(void *ctx, int callback_arg) {
Class *me = (Class *)ctx;
return me->callback(callback_arg);
}
int Class::callback(int callback_arg) {
return this->fCount;
}
相关文章: