0

私のアプリケーションは、OpenGL を使用して C++ で記述されたグラフィックス アプリケーションです。GLFW、GLEW、GLM などのライブラリを使用する必要があります。ただし、この質問に答えるために、これらのライブラリや OpenGL について知る必要はありません。ポイントは、これらのライブラリはすべて C で記述されているため、オブジェクト指向ではないということです。

そのせいで何度もトラブルに見舞われました。たとえば、現在、特にウィンドウのサイズ変更イベントの関数をパラメーターとして GLEW に渡す必要があります。Cにはクラスがないため、静的関数が必要です。また、この関数のクラスメンバーを変更できないという問題が明らかになります。(そして、そのクラスへのグローバルポインタを提供するためにそれを処理できませんでした...)

私はオブジェクト指向を維持したいという事実のために、最近何度かコードを再構築する必要がありました。そして、私は今それを悲しんでいます。

オブジェクト指向のサポートなしでライブラリを使用して、そのようなオブジェクト指向プロジェクトを処理するためのアプローチやガイドラインはありますか?

4

1 に答える 1

1

多くの場合、C ライブラリでは、コンテキスト ポインター/参照定数 (通常はvoid *or型) を渡すことができます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 に答える