web-dev-qa-db-ja.com

2つのタイプがC ++で等しいかどうかを確認します

C++ 11で型が等しいかどうかを確認するにはどうすればよいですか?

 std::uint32_t == unsigned;  //#1

そして別のスニペット

template<typename T> struct A{ 
  string s = T==unsigned ? "unsigned" : "other";
}
12
kyb

C++ 11以降はstd::is_same<T,U>::valueを使用できます。

ここで、TUはタイプであり、valueは同等の場合はtrueになり、同等の場合はfalseになります。そうではありません。

これはコンパイル時に評価されることに注意してください。

http://en.cppreference.com/w/cpp/types/is_same を参照してください。

12
user6420285

楽しみのために、これを試してください:

template<class T>
struct tag_t { using type=T; constexpr tag_t() {}; };
template<class T>
constexpr tag_t<T> tag{};

template<class T, class U>
constexpr std::is_same<T, U>  operator==( tag_t<T>, tag_t<U> ) { return {}; }
template<class T, class U>
constexpr std::integral_constant<bool, !(tag<T> == tag<U>)> operator!=( tag_t<T>, tag_t<U> ) { return {}; }

これで、tag<T> == tag<unsigned>と入力できます。結果はconstexprであり、戻り値の型でエンコードされます。

実例