2つのタイプが同じかどうかチェックしたいと思いますが、テンプレートパラメータに関係なくチェックします。このような何か:2つのタイプが同じテンプレートクラスから来たかどうかをチェックする方法
template<class T>
class A {};
class B {};
int main() {
cout << std::is_same_template<A<int>, A<string>>::value << endl; // true
cout << std::is_same_template<A<int>, B>::value << endl; // false
}
は、私は2つのタイプがexacty一致するかどうかをチェックするためにstd::is_same
の承知しています。私はこれを必要とする理由
理由: 私はどのようなタイプで呼び出すことができますテンプレートメソッドを持っていますが、私はそれを禁止したいと思いますが、おそらくstatic_assert
を使用することにより、(テンプレートである)タイプA
と呼ばれています。私が使用して、いくつかの一般的なTsのためにAを手動で除外することができ 、私が探しています:A
はテンプレートはありませんでした
EDIT ...、私はそれがstd::is_same
を使用して簡単に行うことができると考えているが、今、私は問題を抱えていますすべてのTのためにそれを行う方法:
static_assert(!std::is_same<parameter_type, A<int>>::value, "Cannot use this function with type A<T>");
static_assert(!std::is_same<parameter_type, A<double>>::value, "Cannot use this function with type A<T>");
static_assert(!std::is_same<parameter_type, A<bool>>::value, "Cannot use this function with type A<T>");
二種類テンプレートパラメータが異なる場合、同じではありません。したがって、 'A'と 'A 'は同じタイプではありません。 –
skypjack
まあ、私はよく知っているので、私は 'std :: is_same'を使うことができません。私が求めているのは、あまり厳密に比較する方法がない場合、AとA を等しく比較し、A とBを比較しないようにする方法です。 –
jureslak
テンプレートの特殊化によって逆のアプローチを使用できます。したがって、許可されたクラスのみを受け入れ、それ以外の場合は空の/壊れた/投げ込み/その他の関数を定義します。 – skypjack