コンストラクターが相互に排他的な署名を持つ、引数クラスとして受け取るテンプレートを作成するにはどうすればよいですか?
class A
{
A(){};
public:
int a;
A(int i) : a(i) {};
};
class B{
B(){};
public:
int a,b;
B(int i,int j) : a(i), b(j) {};
};
template <class T> class C {
public:
T* _t;
C(int i[])
{ //???
_t=new T(i[0]); //if T has T(int) signature
_t=new T(i[0],i[1]); //if T has T(int,int) signature
}
~C() {delete _t;}
};
int main()
{
int Ai[]={1,2};
C<A> _c(Ai); // template should work instantiated with A and B
C<B> _c(Ai); //
return 0;
}
A
およびの署名B
は固定されています(たとえば、int []に変更することはできません)。コンテキスト:(特殊な)コンテナータイプをテンプレート引数として受け取るラッパー(、、、など)について考えています。T=vector<int>
このT=map<int,int>
問題は、コンストラクターを呼び出す必要があるときに発生します。