web-dev-qa-db-ja.com

C ++が関数に変数型を渡す

変数型を関数に渡すにはどうすればよいですか?このような:

void foo(type){
    cout << sizeof(type);
}
31
user3325976

型はオブジェクトではないため、そのような型を渡すことはできません。実行時には存在しません。代わりに、コンパイル時に異なるタイプの関数をインスタンス化できるテンプレートが必要です。

_template <typename T>
void foo() {
  cout << sizeof(T);
}
_

たとえば、foo<int>()を使用してこの関数を呼び出すことができます。 Tintに置き換えて、関数のバージョンをインスタンス化します。 関数テンプレート を検索します。

39

ジョセフ・マンスフィールドが指摘したように、関数テンプレートはあなたが望むことをします。状況によっては、テンプレート引数を明示的に指定する必要がないように、関数にパラメーターを追加することが理にかなっている場合があります。

_template <typename T>
void foo(T) {
  cout << sizeof(T)
}
_

これにより、関数をfoo(x)として呼び出すことができます。ここで、xはT型の変数です。パラメーターなしのバージョンは、foo<T>()として呼び出す必要があります。

14
microtherion