2016-05-01 13 views
-1
私はこのような何かを達成したいと思い

一般/ダイナミック型のC/C++

class Test { 
    Test() {} 
    Test(generalObject a){ 
     // do something 
    } 
} 

int main(){ 
    Test a = 5; 
    Test b = "A"; 
    Test c = true; 
} 

は、私は希望の溶液で、このも可能ですか?

generalObjectは、他のタイプでもよく、クラスタイプである必要はありません。もちろん、私は異なるタイプの異なる演算子のように書くことができますが、私はそのフェーズをスキップしたいと思います。

+0

'operator :: ='はまあまあ有効ではありません。これは 'operator =' – ForceBru

+0

でなければなりません。C言語のプログラミングでは、/ –

+1

CやC++のどちらかを選択してください。 –

答えて

2

これら:

Test a = 5; 
Test b = "A"; 
Test c = true; 
Test d = Test(); 

は、彼らがcopy initializationsあり、割り当てではありません。コンパイラは非明示的なコンストラクタ(最後の文のコピーコンストラクタを含む)を探します。 operator=はあなたのコードでは必要ありません。

あなたは渡された引数に何もしていないように、これはアップします(唯一のあなたのコードをコンパイルするために取得する):

struct Test { 
    Test() = default; 

    template <typename T> // a constructor template 
    Test(T const&) {} 
}; 

C++は、すべてのタイプの基本クラスを持っていない、あなたがする必要がありますコンストラクタテンプレートを使用して、コンパイル時に必要なすべての型のコンストラクタをインスタンス化します。


あなたが実際にTest(配列型のテンプレート特殊化、便利な関数テンプレートmake_test、等...)内の引数を保存したい場合、これは複雑になります。私はこれがテンプレートへのあなたのエントリーだと思いますので、一歩一歩進んでみてください。

+0

うん、それも気付いた^^ –

1

あなたの例では、代入演算子はなく、様々なタイプを受け入れますconverting constructor必要いけない:

class Test{ 
public:  
    Test(){} 

    Test(int r){} 
    Test(const char* r){} 
    Test(bool r){} 
    Test(const Test& r){} 
}; 
int main(){ 
    Test a = 5; 
    Test b = "A"; 
    Test c = true; 
    Test d = Test(); 
} 

をしかし、それはまた、代入演算子を実装するために理にかなっています。あなたが本当にどのようなタイプは、その後、テンプレートを使用する必要がある場合は、あなたのコンストラクタは以下のようになります。

template<typename T> 
    Test(const T& t){} 
+0

あなたは正しいと思います。笑:D –

関連する問題