0

我的应用程序是使用 OpenGL 用 C++ 编写的图形应用程序。我需要使用一些库,如 GLFW、GLEW 和 GLM。但是您不需要了解这些库或 OpenGL 来回答这个问题。关键是所有这些库都是用 C 语言编写的,因此没有面向对象。

我因此多次遇到麻烦。例如,目前我必须传递一个函数,特别是我的窗口的调整大小事件,作为 GLEW 的参数。它需要一个静态函数,因为 C 中没有类。并揭示了我无法修改此函数中的任何类成员的问题。(而且我无法处理它以提供指向该类的全局指针......)

因为我想保持面向对象,所以最近我不得不多次重构我的代码。我现在为此感到难过。

那么,是否有任何方法或指南可以使用没有面向对象支持的库来处理此类面向对象的项目?

4

1 回答 1

1

很多时候,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;
}
于 2012-09-18T18:46:16.457 回答