我有一個通用的範圍類,我試圖添加一個比較運算符,所以我可以測試一個範圍是否等於另一個。它無法編譯,我不知道如何解決它所抱怨的問題。我錯過了明顯的東西嗎?這裏的代碼片段:無法爲泛型類型創建運算符==?
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