您好我正在C++中構建模板,並且我需要覆蓋模板內的運算符「<」,以便能夠在我的數據結構中的項目之間進行比較。 任何人都可以請告訴我如何覆蓋它......我應該發送一個指向模板的構造函數內的函數的指針? 我有兩個模板,第一個是Node模板,它包含一個指向我管理的數據的指針。 ,第二個是具有節點*向量的堆模板。 在我的實現中,我應該能夠比較節點*。如何覆蓋模板中的運算符
0
A
回答
1
請問這樣做?我特意在命名空間範圍內提供了'運算符<',以便它更通用,儘管它在註釋中顯示瞭如何操作。
template<class T> struct A;
template<class T, class U> // Remove U and modify accordingly, if f and s
// have to be of the same type.
bool operator < (A<T> const &f, A<U> const &s){
// have the logic here
return true;
}
template<class T> struct A{
// template<class U> // This is how you define inside a class.
// bool operator < (A<U> const &s){
// have logic here
// return true;
// }
};
int main(){
A<int> a;
A<double> d;
bool b = a < d;
}
0
如果模板用於項目類型,那麼假設它們有一個比較器,即* node < *節點。
0
在C++中重載操作符其實很簡單。也許你想在你的節點類做的是:
template<typename MyData>
class Node {
private:
MyData data_;
// ...
public:
// ...
bool operator < (Node const &rhs) const;
};
// ...
template<typename MyData>
bool Node<MyData>::operator < (Node const &rhs) const {
return data_ < rhs.data_;
}
這在超載的Node
類<
運營商,僅僅調用底層data_
值的<
運營商版本。
你可以把任何你想要的代碼放在函數內,除了它的名字和參數個數沒有特殊的屬性。你甚至可以使用它來比較不同的類型或返回不同的值。例如,您可以將rhs
更改爲int
,然後您可以將節點與整數進行比較(例如Node n; if (n < 10) ...
)。
相關問題
- 1. 如何覆蓋C++模板子類中的轉換運算符?
- 2. 如何覆蓋==運算符
- 3. 覆蓋運算符c#
- 4. 全局覆蓋==運算符
- 5. 用qtscript覆蓋運算符
- 6. OpenCL cl_float4運算符覆蓋
- 7. Python覆蓋+運算符
- 8. 如何覆蓋notFound模板?
- 9. 如何覆蓋@ Html.LabelFor模板?
- 10. Ruby中的覆蓋==運算符
- 11. 覆蓋sqlalchemy中的__eq__運算符
- 12. 覆蓋python中的所有運算符
- 13. 覆蓋NHibernate中的==(相等)運算符?
- 14. 在C++中覆蓋=運算符
- 15. 如何在Ruby中覆蓋常規的二元運算符,如+, - ,*,/?
- 16. 在AS3中,如何覆蓋[]運算符的setters和getters?
- 17. 如何覆蓋C#中接口的等號運算符==?
- 18. 覆蓋的運算符<< in C++
- 19. 覆蓋python類上的__or__運算符
- 20. 如何覆蓋jbot已覆蓋的模板?
- 21. Magento的2 - 如何覆蓋塊模板
- 22. 躋覆蓋模板
- 23. TYPO3模板覆蓋
- 24. Joomla模板覆蓋
- 25. Sylius覆蓋模板
- 26. FOSUserBundle - 覆蓋模板
- 27. 覆蓋EditorForModel模板
- 28. 在模板類上覆蓋賦值運算符時出現奇怪的行爲
- 29. Magento覆蓋裝運部分模板
- 30. 跨命名空間覆蓋運算符
你是什麼假設他們有一個比較的意思是,他們沒有一個比較,我需要做1,我的問題是在哪裏,我應該如何實現覆蓋。 – 2010-09-19 11:47:24
怎麼你可能會創建一個你沒有創建的類型的比較器? – Puppy 2010-09-19 12:09:03