2011-06-27 12 views
0

私はAllegro 5フレームワークを使用しています。イベントキューを作成する必要があるときは、 'al_create_event_queue'を呼び出してエラーをチェックし、 'al_destroy_event_queue'を破棄する必要があります。作成するオブジェクトごとに使用しなければならないのは同じメカニズムなので、非常に退屈です。クラスへのポート構造

私の質問は、my_event_queueのコンストラクタが実際に 'al_create_event_queue'を呼び出し、デストラクタが 'al_destroy_event_queue'を呼び出すように構造体をクラスに '移植'する方法がありますか? そうでなければ、私の 'Game'メインハンドラクラスが破壊されたときに自動的に削除されるように、これらの関数によって作成されたオブジェクトをどのように追跡できますか?

答えて

0

もちろん、コンストラクタに構造を作成するコードと、デストラクタでそれを削除するコードを置くことができます。あなたはこれらの型をラップするためにあまりにも多くを行うことはできません

struct MyQueue { 
    MyQueue() : queue(al_create_event_queue() { } 
    ~MyQueue() { al_destroy_event_queue(queue); } 

    ALLEGRO_EVENT_QUEUE* queue; 

private: 
    MyQueue(const MyQueue&); 
    MyQueue& operator =(MyQueue); 
}; 

注...あなたは基本的に世界への基礎となるqueueオブジェクトを公開する必要がアレグロコードでそんなにこれらのポインタの周囲を通過します。

+0

プロトタイプは "ALLEGRO_EVENT_QUEUE * al_create_event_queue()"です..どのようにALLEGRO_EVENT_QUEUEとMyQueueデータ型を一致させるか?私は、代わりにMyQueueを渡すことによってALLEGRO_EVENT_QUEUE構造体を必要とする関数を呼び出す必要があります...そして、変数の最後に '&'は何を表し、 'operator'は何を表しますか? (残念ですが、私はPythonから来ています!) – Silver

+1

@Silver:あなたがPythonから来たのなら、これはあなたがしなければならないものではありません。 C++の仕組みを学ぶ必要があります。構文に精通していなくても、C++でゲーム開発に取り掛かることはできません。 –

+0

@シルバー:私は実際のインターフェースを修正するために更新しましたが、私はニコールに同意する傾向があります。ダイビングによるC++の学習は、一部の言語と同様に機能しません。そしてAllegroを使ってそれを行うのはさらに悪いことです...それはC++コンパイラでコンパイルされるCライブラリです。そして、それとインタフェースするコードから悪い習慣を拾います。 –

1

はい。あなたはあなたが言ったことを正確に行います。あなたはあなたの自己のためにこれを考え出したようです。

ただし、コピーを正しく処理する必要があります。このオブジェクトを(boost :: noncopyableのようなものを介して)コピーすることを禁止するか、コピーコンストラクタとコピー代入演算子を記述する必要があります。さて、Allegroのイベントキューはコピー可能ではありません(Allegroの機能はありません)ので、おそらくコピーを禁止するべきです。

C++ 0xにアクセスできる場合は、の代入と移動代入演算子を使用してください。

+0

「コピー」とはどういう意味ですか? – Silver