我有一个通用的范围类,我试图添加一个比较运算符,所以我可以测试一个范围是否等于另一个。它无法编译,我不知道如何解决它所抱怨的问题。我错过了明显的东西吗?这里的代码片段:无法为泛型类型创建运算符==?
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
我需要定义,我想重载每个类型转换(I”使用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");
}
...这编译好的一边fromt他上述错误:
[编辑]如下我有一个实例。如果我将每个值转换为Int32编译,但实际上我想尽可能保持类的通用性(即不要为每种类型重载)。我想我可以分类为每种类型,并做那里的超载运营商,但解决方案是不太整洁比我预期当我第一次发现generic
s ;-)
您有一个类的实例,其中T用实际类型替换 - 该类型是否具有一个==运算符? – sharptooth 2009-09-18 09:19:49