- ベストアンサー
Tのコンストラクタ
テンプレートを規定のコンストラクタがないクラスで特定する使い方は出来ますか。 教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
こんなのでどうでしょうか? 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; } これが一番期待されているものに近いと思います。
その他の回答 (4)
- Tacosan
- ベストアンサー率23% (3656/15482)
C1 のデフォルトコンストラクタを使わなければいいだけ, じゃないの?
- MASATO3
- ベストアンサー率60% (27/45)
#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つも無い場合の両方に対応できます。 上記コードは但しテストしてませんので動くかどうかは不明です。
お礼
考えてくれて、有難う御座います。
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
無理。コンストラクトするすべがない。 template <class T> class T1{ T t; public: T1() : t(0) {} // [*] }; 上記 [*] を追加していいなら別ですけど。
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
質問の意味が理解できません。もっと詳しく。
補足
すいません class C1{ public: C1(int n){} }; template <class T> class T1{ T t; }; int main() { T1<C1> t1; return 0; } 上の様に、規定のコンストラクタがないC1でT1を特定するような使い方は出来るんでしょうか。
お礼
参考になりました。 有難う御座いました。