gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 07:57:03 28 4
gpt4 key购买 nike

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

我因此多次遇到麻烦。例如,目前我必须传递一个函数,特别是我窗口的调整大小事件,作为 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;
}

关于c++ - 使用 C 库的面向对象应用程序的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12482912/

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