• ベストアンサー

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

  • コンストラクタって?

     ↓    ↓    ↓ クラスを基にインスタンス化を行いますが このときに初期化を行わなくてはならないことがあります。 それを実現するのが「コンストラクタ」です。 のような解説はたくさん読んできたのですが 具体的にどういう場合にコンストラクタを使用するのでしょうか? プログラムには必ずコンストラクタは必要なんですか? 例えばシューティングゲームを作るときの こういう処理にコンストラクタが役立つんだよー! などという具体的な例があればぜひ教えてください。 どなたかご協力よろしくお願いします!

    • ベストアンサー
    • Java
  • コンストラクタ

    C++初心者です。 最近、クラスの分野を勉強し始めたのですが、 コンストラクタというものがイマイチしっくり来ずに 頭を抱えています。 コンストラクタというのは一体何をするものなのですか? 絶対必要なのですか?

  • コンストラクタについて

    VCの勉強をしています。 ちょっとショッキングなことを聞いてしまいました。 クラスのインスタンスを作成した場合、 コンストラクタは継承もとのコンストラクタもよばれる?? これって本当ですか!! MFCだとクラスの階層はだいぶ深いです。 例えば基本のCviewなんかはCObject>CCmdTarget>CWnd>Cviewの順に継承されています。 MFCでは更にCViewを継承したCTestViewなんてクラスがコードの主役です。 それでCTestViewのインスタンスを作成した場合、 コンストラクタはCTestViewのコンストラクタだけ実行すると思いますが、 ショッキングな内容ではCViewのコンストラクタも実行されてます。 これって本当にそうなるのでしょうか。 もし、そうならコンストラクタはてっぺんのCObjectから順に実行されますか。 それとも1つ上の継承先だけですか。 また、何でこんな仕組みにする必要があるのですか? 更にいえばCObjectにはSerializeという関数があります。 これをCTestView.serializeとした場合、 CObjectから順々にSerializeが呼び出されているのでしょうか? そんなことあるわけないよと、あまりにもバカバカしいのですが、 知人がそうだと言い張るのでよろしくお願いします。

  • 親クラスのコンストラクタは? 引数付きコンストラクタは?

    VisualBasic.NETです。 あるクラスを継承したクラスからインスタンスを作成したときに、派生クラスのコンストラクタは呼び出されると思うのですが、基本クラスのコンストラクタはどうなるのでしょうか? JAVAのように、super() で呼び出す必要があるのでしょうか? 自動で呼び出されるのでしょうか? それとも、そもそも呼び出せないのでしょうか? また、引数の個数が違うコンストラクタは、同じクラス内に設定できるのでしょうか? JAVAのコードを移植しようと考えているのですが、出来るのかどうかが分からずに悩んでいます。 ご存じの方、よろしくお願いします。

  • デフォルトコンストラクタについて

    クラスについて、デフォルトコンストラクタについて理解が乏しいのですが、クラスB側で何か細工をすると、クラスAのデフォルトコンストラクタ無しで、エラーなくコンパイルできるのでしょうか? 派生クラスの親のベースクラスのコンストラクタを呼ぶsuper?でOKなのでしょうか? #include "stdafx.h" class A { public: //A(){} // これをコメントアウトにすると // error C2512: 'B' : クラス、構造体、共用体にデフォルト コンストラクタがありません。 A(int x){} ~A(){}; }; class B : A { }; void main(void){ B b; }

  • 計算してからコンストラクタに渡すか

    メインクラスAからクラスBをインスタンス化します。 Bクラスが持つ変数Cには1~100までの数値がランダムで入ります。 ここで、AクラスであらかじめCを計算しておいてBクラスのコンストラクタに引数として渡すのか それともAクラスではBクラスを生成するだけで、 Bクラスのコンストラクタ内で変数Cの値を計算するのか どちらが良いでしょうか? お教えください。

    • ベストアンサー
    • Java
  • 【.NET】コンストラクタをあとで呼出す方法

    .NET初心者です。 今VB.NETでVB6向けの自作COMクラスライブラリを作成しています。 自作クラスはStreamWriterクラスのラッパークラスとしてStreamWriterと継承関係にあります。 COMは引数なしのコンストラクターを一つ用意しなければなりませんが、 StreamWriterクラスは引数なしのコンストラクタを用意されていないため困っています。 自作クラス自身もFileクラスのラッパークラスで引数として使う必要があるため 継承関係を維持してVB6に公開する必要があります。 この問題をなんとか解決する手法って存在するのでしょうか? ちなみにほかに考えた手法は下記です。 ・プロパティーに StreamWriterのインスタンスを用いて継承関係なしであとでinitメソッドを呼び出す   →Fileラッパークラスの引数でStreamWriter型に代入出来ないため不可 ・StreamWriterを引数に取るメソッドの実装をあきらめる   →極力したくない ・StreamWriterラッパークラスの引数なしコンストラクタでStreamWriterクラスの引数ありコンストラクタを呼ぶ   →後でファイルのパスを指定する方法が見つからないため不可 他言語はそれなりにやってきたのでコンストラクターをあとで呼び出すなんて出来ないのはなんとなくわかるのですが何せ.NETを触り始めたのが最近なのでよろしくお願い致します。

  • 親クラスコンストラクタを呼び出すタイミングについて

    ・親クラスコンストラクタを呼び出すタイミングに決まりはあるのでしょうか? ・例えば、子クラスのコンストラクタではなくて、子クラスのメソッドとかで呼び出しても良いのでしょうか? ・後、親クラスコンストラクタ処理が不要な場合は、子クラスから呼ばなくても別に構わないのでしょうか?

    • ベストアンサー
    • PHP
  • コンストラクタについて教えてください!!

    すみません A a = new A(); を例にとりますと Aクラスに引数のないコンストラクトがありますと、そのコンストラクトが呼ばれ、Aクラスにコンストラクトが存在しないとデフォルトコンストラクトが呼ばれるのでしょうか?つまりA a = new A();の式でもAクラスのコンストラクタが存在するかしないかで2通りの呼び方があるということでいいのでしょうか?

    • ベストアンサー
    • Java
  • コンストラクタとデリゲートの意味を教えてください。

    コンストラクタは、起動時に自動生成される処理のことをいいますか? 1度だけ実行されるクラスをコンストラクタと言っているのですか??? デリゲートは、クラスからメソッドを呼び出すことをデリゲートといいますか? クラスから処理を別に渡すとそれはデリゲートですか???

このQ&Aのポイント
  • キヤノンプリンターMG7530の表示部に「カセット1で用紙が詰まっています。排紙口から用紙を取り除いて下さい。」と表示されています。
  • 使用しているプリンターの説明書をなくしてしまいました。
  • 排紙口とカセット1とはどこにあるのでしょうか。
回答を見る