1

私は次のクラスを持っています:

template<unsigned int offsetX, unsigned int offsetY>
class myClass {
//several int and floats that are computed with offsetX and offsetY
//and other stuff
}

テンプレート化されたパラメータに関係なく、そのサイズは同じです。myClass<1,1>やmyClass<0,0>などのインスタンスを同じコンテナに保存できますか?テンプレート化されたものがクラスの場合は不可能だと理解していますが、この場合、クラスのレイアウトは常に同じです。

編集:offsetXとoffsetYをクラスのコンストラクターに送信でき、テンプレートがないことはわかっていますが、この場合、コンパイル時に認識されます。

4

3 に答える 3

3

これらの一般的なintとfloatのすべてが配置されるテンプレートの基本クラスを定義します。

派生テンプレートは、ベースフィールドの計算にのみ使用してください。次に、基本クラスで定義されたコンテナにテンプレートインスタンスを挿入できます。これは、オブジェクトスライスと呼ばれます。一般的に、それは良いことではありません...

テンプレートクラスを削除し、テンプレートc-torによってすでに実行されていることを実行するテンプレート関数を定義することをお勧めします。

template <int x, int y> inline MyClass compute()
{…}
于 2012-09-02T15:22:45.723 に答える
2

タイプが違うのでできません。共通の基本クラスを使用してそれにスマートポインターを格納するか、boost::anyを格納できます。

class MyBase { .... };

template<unsigned int offsetX, unsigned int offsetY>
class myClass : public MyBase{ .... };

それから

std::vector<std::unique_ptr<MyBase>> v;

v.push_back(std::unique_ptr<MyBase>(new myClass<1,1>()));
v.push_back(std::unique_ptr<MyBase>(new myClass<0,0>()));
于 2012-09-02T15:13:36.290 に答える
0

いいえ、できません。タイプmyClass<1, 1>myClass<0, 0>は無関係です。

于 2012-09-02T15:13:10.830 に答える