テンプレートクラスがあります
template <class T>
class myClass
{
public:
/* functions */
private:
typename T::Indices myIndices;
};
ここで、メインコードで、条件に応じてテンプレートクラスをインスタンス化します。好き :
myFunc( int operation)
{
switch (operation) {
case 0:
// Instantiate myClass with <A>
auto_ptr < myClass <A> > ptr = new myClass<A> ();
case 1:
// Instantiate myClass with <B>
auto_ptr < myClass <B> > ptr = new myClass<B> ();
case 2:
// Instantiate myClass with <C>
....
}
// Use ptr here..
}
このアプローチの問題はauto_ptr<>
、の終わりにが死ぬことですswitch{}
。また、事前にインスタンス化される型がわからないため、関数の最初で宣言することはできません。
コンパイル時に(テンプレートを使用して)実行時のことを達成しようとしていることは知っていますが、それでもこれを行うためのより良い方法があるかどうかを知りたいと思っていました。