2014-04-09 46 views
0

這是包含重載函數運算符類:如何使用另一個類的重載函數操作符(operator())?

template < typename KeyType=int > 
class Less { 
    public: 
    bool operator()(const KeyType &a, const KeyType &b) const { return a < b; } 
    }; 

我如何使用它?該類在包含堆ADT的類規範的頭文件中指定。我正在嘗試在我的堆ADT的成員函數中使用它,並且不確定語法。我認爲這將是如下:

if(Less<KeyType>::(param1, param2)){ 
... 

但是,編譯器給我一個錯誤:expected unqualified-id before '(' token

它的工作是這樣的:

if(Less<KeyType>::operator()(param1, param2)){ 
... 

但必須有使用方法它以另一種方式不那麼混亂。如果我想讓它看起來像這樣,我不會首先超載一個操作員,並且會讓它成爲一個典型的功能。

我已經試着在這裏問一些關於這個問題的研究之前,但有點難以找到這個具體的東西的答案。我的搜索引導我轉到不同的主題。

+1

試試這個:'少()(參數1,參數2)'。 – Deduplicator

+0

工作,謝謝! – Bobazonski

回答

1

該運算符是一個非靜態成員函數。所以你需要創建一個類型爲Less的對象來調用它。例如

if (Less<>()(param1, param2)) { /*...*/ } 

或者

if (Less<SomeType>()(param1, param2)) { /*...*/ } 
+0

我明白了......但我想確保我完全理解這一點。您的解決方案實質上是在一行中聲明一個'Less'類型的對象並使用其成員函數?也就是說'Less <>()'是聲明一個對象嗎? – Bobazonski

+1

@Bobazonski Less <>()是創建臨時對象然後調用操作符函數的默認構造函數的調用。 –

+0

明白了 - 謝謝! – Bobazonski

相關問題