1. ホーム
  2. c++

[解決済み] C++テンプレートコンストラクタ

2022-03-06 23:46:54

質問

テンプレートではないクラスで、引数なしのテンプレートコンストラクタを持ちたいのですが、どうすればよいですか?

私が理解する限り、それを持つことは不可能です(デフォルトのコンストラクタと衝突してしまうため -)。 ということでよろしいでしょうか? ), で、その回避策は以下の通りです。

class A{
   template <typename U> A(U* dummy) {
   // Do something
   }
};

もしかしたら、これに対するより良い代替案(あるいはより良い回避策)があるのでは?

解決方法は?

コンストラクタのテンプレートを呼び出すときに、テンプレートの引数を明示的に指定する方法がないため、引数演繹法で推論する必要があります。 というのも、もし

Foo<int> f = Foo<int>();

<int> という型のテンプレート引数リストです。 Foo であり、そのコンストラクタのものではありません。 コンストラクタのテンプレートの引数リストがどこにもないのです。

あなたの回避策を用いても、そのコンストラクタ・テンプレートを呼び出すために引数を渡さなければなりません。 何を実現しようとしているのか、まったく不明です。