У меня есть определение моего собственного типа bool
template<bool b>
struct Bool {
constexpr static bool value = b;
};
using True = Bool<true>;
using False = Bool<false>;
Я пытаюсь получить что-то вроде экземпляра haskell Bool класса Eq.
template<typename T>
struct Eq {
template<typename R>
struct equal;
template<typename R>
struct notEqual {
using value = typename not_<typename equal<T, R>::value>::value;
};
};
Интересно, как это сделать?специализация класса "равный".Чтобы быть более понятным, я хочу что-то вроде этого:
template<bool a>
template<bool b>
struct Eq<Bool<a>>::equal<Bool<b>> {
using value = typename std::conditional<a == b, True, False>::type;
};
Есть ли решение для этого?Я попытался сделать этот трюк:
template<bool a>
struct Eq<Bool<a>>::equal<Bool<a>> {
using value = True;
};
, но компилятор говорит мне: «mtp::Eq<T>::equal
: слишком много аргументов шаблона».Спасибо за вашу помощь.