ここに状況があります:私はC++、SDL、GLConsoleを併用しています。私はクラスSDLGame
、Init()
、Loop()
、Render()
などを持っています - 本質的に、私のゲームクラスのロジックを保持しています。
GLConsoleはこれまでの素晴らしいライブラリです。私のSDLクラスの中でさえ、CVarsなどを定義できます。コマンドを定義するときしかし、私は十分にシンプル関数へのポインタとしてのメンバ関数へのポインタの受け渡し
typedef bool (*ConsoleFunc)(std::vector<std::string> *args);
としてtypedefされConsoleFunc
を、指定する必要があります。しかし、私が言ったように、私の関数はすべて私のクラスにあり、関数へのポインタとしてクラスへのポインタを渡すことはできません。静的関数を定義したり、クラス外の関数を作成することはできません。これらのConsoleFuncの中には、クラスデータメンバーにアクセスする必要があるものがあります。私はそれをOOPにしておきたいと思います - OOPはいいです
実際、この問題は「解決済み」ですが、非常に醜いです。私はただSDLGame
のインスタンスをextern変数として宣言し、それを私のConsoleFuncs/mainクラスで使用しています。
質問:これを行う方法は、私がそれをやっているようにばかばかしくて、ばかなことではないのですか? (あるいは、SDLをサポートするGLConsoleのようなコンソールライブラリがあり、私が何を記述しているのかが分かります)
ウェルドン。とにかくありがとう。別のライブラリを使用するための提案はありますか?私はOGLConsoleを見ていましたが、まったく同じ問題があります。 – Chaosed0
@user:申し訳ありませんが、ライブラリの提案はありません。 :/ – Xeo
"void *" "ユーザーデータ"の使用を強くお勧めします。確かに、それは現代的な言語の「デリゲート」ほどではありませんが、コールバックとユーザーデータをペアとして登録するコードなので、安全な方法です。コールバックがその意図を念頭に置いて設定されているので、入ってくる 'void * 'を適切なクラス型にキャストするだけで100%安全です。 – TheBuzzSaw