• ベストアンサー

Tのコンストラクタ

テンプレートを規定のコンストラクタがないクラスで特定する使い方は出来ますか。 教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.4

こんなのでどうでしょうか? class C1{ public:   C1(int n){} }; template <class T> class T1{   T t; public:   T1() {}   template <typename U>   explicit T1(const U& arg) : t(arg) {} }; int main() {   T1<C1> t1(0);   return 0; } これが一番期待されているものに近いと思います。

wsp
質問者

お礼

参考になりました。 有難う御座いました。

その他の回答 (4)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.5

C1 のデフォルトコンストラクタを使わなければいいだけ, じゃないの?

  • MASATO3
  • ベストアンサー率60% (27/45)
回答No.3

#1の「回答に対する補足」に示されたコードがどのように動いて欲しいと期待しているのかが分からないので 的外れかもしれませんが、 こんなやり方もあります。 class C1{ public:  C1(int n){}  typedef int arg_type; }; template <class T> class T1{ public:  T1(){}  T1(typename T::arg_type n) : t(n){}  T t; }; int main() {  T1<C1> t1(1);  return 0; } C1のコンストラクタに引数が1つある場合と1つも無い場合の両方に対応できます。 上記コードは但しテストしてませんので動くかどうかは不明です。

wsp
質問者

お礼

考えてくれて、有難う御座います。

回答No.2

無理。コンストラクトするすべがない。 template <class T> class T1{ T t; public: T1() : t(0) {} // [*] }; 上記 [*] を追加していいなら別ですけど。

回答No.1

質問の意味が理解できません。もっと詳しく。

wsp
質問者

補足

すいません class C1{ public: C1(int n){} }; template <class T> class T1{ T t; }; int main() { T1<C1> t1; return 0; } 上の様に、規定のコンストラクタがないC1でT1を特定するような使い方は出来るんでしょうか。

関連するQ&A