这很简单。只需定义一个类型特征和一个辅助函数:
template<typename T, typename U>
struct is_same
{
static const bool value = false;
};
template<typename T>
struct is_same<T, T>
{
static const bool value = true;
};
template<typename T, typename U>
bool eqTypes() { return is_same<T, U>::value; }
这是一个活生生的例子。
在 C++11 中,如果你被允许使用std::false_type
and std::true_type
,你可以这样重写上面的代码:
#include <type_traits>
template<typename T, typename U>
struct is_same : std::false_type { };
template<typename T>
struct is_same<T, T> : std::true_type { };
template<typename T, typename U>
constexpr bool eqTypes() { return is_same<T, U>::value; }
请注意,类型 traitstd::is_same
的作用几乎相同,可作为标准库的一部分使用。