Ответ 1
Это довольно просто. Просто определите тип и вспомогательную функцию:
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; }
Вот живой пример.
В С++ 11, если вам разрешено использовать std::false_type
и 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; }
Обратите внимание, что черта типа std::is_same
, которая делает почти то же самое, доступна как часть стандартной библиотеки.