2

ゲーム エンジンのコーディングを行っており、頂点、テクスチャ、フォントなどのリソース ベース クラスを作成しています。

現在、Image (テクスチャを使用)、Text (フォントを使用)、Models (頂点を使用) など、これらの基本クラスを使用する別のプログラマーに公開したいいくつかの基本クラスを作成しています。

ゲームエンジンも公開されているので、その関数などを呼び出してゲームをコーディングすることができます。

しかし、私は彼らが基本クラスにアクセスすることを望んでおらず、クラスと競合することも望んでいません。たとえば、彼らはゲーム内で何かのために「Material」という名前のクラスを作成したいかもしれませんが、私のリソースにはすでに「Material」クラスがあります。どうすれば競合を回避でき、さらに良いことに、これらの基本クラスを非表示にすることができますかそれと何かを破る)?

編集:たとえば、公開されたクラスImageがあります。これにはQuadおよびTexture基本クラスのプライベート インスタンスが含まれており、私のリソース マネージャーは常にこれらの 1 つだけが読み込まれるようにします (したがって、メモリ内にテクスチャ/クワッドが重複することはありません)。

テクスチャ自体は幅/高さを持ち、カードにロードされたデータを管理します。Quadについても同じです。

Imageは、画像のサイズ変更が要求されたときに、変更が必要なすべてのものを変更し、データをカードに再アップロードすることを確認します。

TextureQuadはほとんどどこでも使用されているため公開されています。モジュールとエフェクトを適用するいくつかのクラスがあります。

彼ら(他のプログラマー) はImageインスタンスとして、継承のために、またはメンバーとして使用できます。クラスの命名にも干渉しないでください。

4

1 に答える 1

6

最初の (そして最も簡単な) メソッドは、ライブラリ内のすべてのオブジェクトを特定の名前空間で囲むことです。

その後、少し複雑になります。コンテインメントを介して単に「内部クラス」を利用する「パブリック クラス」をエクスポートする場合は、前方宣言を使用して、使用する「プライベート クラス」へのポインタを保持することができます。これは、 pimpl イディオムを使用して動作と属性に対して実行できます。

次に例を示します。

namespace Foo
{
   class BarImpl;

   class Bar
   {
   // ...
   private:
      std::unique_ptr<BarImpl> object_;
   };
}

ただし、「パブリック クラス」が「プライベート クラス」の定義を (直接の包含または継承によって) 必要とする場合、「簡単な」提供なしにライブラリを (ソース形式で) ユーザーに提供する良い方法はありません。それらのサポート クラスへのアクセス。

于 2013-09-03T18:24:04.713 に答える