检查C ++中两种类型是否相等

时间:2016-09-23 15:20:54

标签: c++ c++11 typetraits

如何在C ++ 11中检查类型是否相等?

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

另一个片段

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

2 个答案:

答案 0 :(得分:10)

您可以从C ++ 11开始使用std::is_same<T,U>::value

此处,TU是类型,value如果等效则为true,如果不是false则为$scope.tableParams = new this.ngTableParams({}, { filterOptions: { filterComparator: function(actual, expected) { return typeof actual == 'string' && actual.match(new RegExp(expected, 'i')); } } });

请注意,这是在编译时评估的。

请参阅http://en.cppreference.com/w/cpp/types/is_same

答案 1 :(得分:2)

为了好玩,试试这个:

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并在返回类型中进行编码。

live example