私はいくつかのコンストラクタを持つクラスを持っています。 argvを介してmain()に渡されるパラメータによれば、私は異なるコンストラクタを切り替える必要があります。次の単純化された例は、「obj」がclassに変更され、 obj1-> intおよびobj2-> doubleです。しかし、enumを使って次のコードを実行するためには、何を変更する必要がありますか?コンストラクタテンプレート
#include<iostream>
using namespace std;
enum obj{obj1,obj2};
template <obj T>
class A
{
public:
A(T);
private:
T t_;
};
template<obj T>
A<T>::A(T)
{}
template<>
A<obj1>::A(obj1 t):t_(t) {cout<<"case 1"<< endl;}
template<>
A<obj2>::A(obj2 t):t_(t) {cout<<"case 2"<< endl;}
int main()
{
obj test=obj1;
A<obj> a(test);
return 1;
}
ありがとうございました!
編集:型/値に関してコードが間違っていることは明らかですが、どのようなメカニズムがコンストラクタの切り替えに似ていますか?
これは意味をなさない。 'obj1'と' obj2'はenum * values *ですが、それらを* types *として使用しようとしています。 –
テンプレートは、** enum値**を指定する必要があることを意味します。 'A 'は値ではないのでコンパイルされません。これは型です。 –