2015-06-15 95 views
0

我有這樣priority_queue自定義比較器作爲一個類的方法

priority_queue<int, std::vector<int>, decltype(&VD::CompareByDistance)> pqDistances(&VD::CompareByDistance); 

代碼,其中

class VD 
{ 
    ... 
    bool CompareByDistance(int indexLeft, int indexRight) const; 
}; 

,但我得到的錯誤

錯誤C2064:術語不計算爲函數取2個參數

我如何傳遞類成員作爲compator,事情是我想比較器來訪問它的實例字段。謝謝。

+0

順便說一下,這個比較函數真的非常量嗎?這並不是很習慣。 –

+0

@BaummitAugen它是常量,謝謝 – Yola

回答

1
bool CompareByDistance(int indexLeft, int indexRight); 

需要三個參數:this終場前和兩個int秒。

此外,priority_queue模板參數的參數數量錯誤:您希望調用哪個非靜態方法的VD的實例?

一種解決方法,這將是「攜帶」了你的實例是這樣的:

VD v; 
auto comp = [&](int i1, int i2) {return v.CompareByDistance(i1, i2);} 

comp對象現在將是您的隊列中的有效模板實參。例如:

struct A{ 
    bool compare (int, int) const {return true;} 
}; 

int main() 
{ 
    A a; 
    auto comp = [&](int i, int i2) {return a.compare(i, i2);}; 
    std::priority_queue<int, std::vector<int>, decltype(comp)> q (comp); 
} 
+0

我有同樣的錯誤。 lambda捕獲這個,這是一個問題 – Yola

+0

@Yola你忘了將'comp'傳遞給隊列的構造函數嗎?適用於我。 ([Live](http://coliru.stacked-crooked.com/a/fed72acd2d03b6d7)) –

+0

雖然CompareByDistance實際使用了'this'指針嗎?否則,我們可以簡單地將它設爲靜態 – KABoissonneault

相關問題