1. ホーム
  2. c++

[解決済み] テンプレート・パラメーターの型を調べるには?

2022-09-04 16:49:25

質問

テンプレート関数と2つのクラスがあるとします。

class animal {
}
class person {
}

template<class T>
void foo() {
  if (T is animal) {
    kill();
  }
}

T is animalのチェックはどうすればいいのでしょうか?実行時にチェックするのではなく 実行中にチェックするようなことはしたくないのですが。ありがとうございます。

どのように解決するのですか?

使用方法 is_same :

#include <type_traits>

template <typename T>
void foo()
{
    if (std::is_same<T, animal>::value) { /* ... */ }  // optimizable...
}

通常、これは全く実行不可能なデザインで、本当にしたいのは 専門化 :

template <typename T> void foo() { /* generic implementation  */ }

template <> void foo<animal>()   { /* specific for T = animal */ }

また、明示的な(非教育的な)引数を持つ関数テンプレートを持つことは珍しいことであることに注意してください。前代未聞というわけではありませんが、しばしばもっと良いアプローチがあります。