2

重複の可能性:
テンプレート関数の動的ディスパッチ?

非型テンプレートを使用して、ヒープに動的に割り当てられたメモリを使用せずに、異なるメモリフットプリントのグリッドセルを作成したいと思います。

template <int cell_size>
class myCell {...}

セルサイズの数には限りがあるため(約10)、それらすべてを明示的に簡単にインスタンス化できます。ただし、どのセルが必要かは、コンパイル時ではなく、実行時のみにわかります。

テンプレートがコンパイル時の概念であることは知っていますが、特に必要なすべてのセルタイプが明示的にインスタンス化されることを保証できるため、この方法でテンプレートクラスを使用する方法はありますか?

4

1 に答える 1

1

ファクトリ パターンを使用できますが、戻り値の型として基本クラスが必要になります。

template <int cell_size>
class myCell : public cellBase {...}

struct CellFactory
{
   static cellBase* getCell(int cell_size)
   {
      switch (cell_size)
      {
         case 1:
            return new myCell<1>;
            break;
         //and so on
      }
   }
}

これは、期待できる特殊化をコンパイラに伝えているため、機能します。しかし、解決しようとしている根本的な問題には、より良い設計が存在すると思います。

于 2012-08-25T14:12:56.940 に答える