У меня есть общий класс диапазона, и я пытаюсь добавить оператор сравнения, чтобы я мог проверить, равен ли один диапазон другому. Он не компилируется, и я не уверен, как решить проблемы, на которые он жалуется. Я что-то упустил очевидное? Вот фрагмент кода:
generic<typename T>
public ref class Range
{
protected:
T m_min;
T m_max;
public:
...
...
bool operator==(Range<T>% rhs)
{
return ( m_min == rhs.m_min ) && ( m_max == rhs.m_max );
}
};
..., который не компилируется со следующей ошибкой:
1>c:\projects\Utils.h(47) : error C2676: binary '==' : 'T' does not define this operator or a conversion to a type acceptable to the predefined operator
Нужно ли определять преобразования для каждого типа, который я хочу перегрузить (я использую экземпляр Int32)? Я надеялся избежать такого рода вещей, поскольку это скорее умаляет использование дженериков.
[Редактировать] У меня есть следующие экземпляры:
Range<Int32> a = Range<Int32>(0,5);
Range<Int32> b = Range<Int32>(1,3);
if( Int32(2) != Int32(4) )
{
printf("Int32 supports != operator");
}
if( a != b )
{
printf("A != B : SUCCESS");
}
else
{
printf("A == B : FAIL");
}
... который хорошо компилируется, кроме упомянутых выше ошибок. Если я конвертирую каждое значение в Int32, оно компилируется, но на самом деле я бы хотел сохранить класс как можно более универсальным (т. Е. Не иметь перегрузок для каждого типа). Я думаю, я мог бы создавать подклассы для каждого типа и выполнять там перегруженные операторы, но решение оказалось менее изящным, чем я ожидал, когда впервые обнаружил generic
s; -)