我有一個 foo 類,在該類內部,我需要一個靜態優先級佇列欄,它保存指向一定數量的 foo 物件的指標,并且 foo 物件還有一個私有成員 buzz,它將在比較時保存物件的權重。
到目前為止,我已經嘗試了以下方法:
class foo{
private:
// some stuff
int buzz;
public:
// some more stuffs
static bool compare (const foo* l, const foo* r){
return l->buzz < r->buzz;
}
static std::priority_queue<foo*, std::vector<foo*>, foo::compare> bar;
};
但是我在 clang 中得到了這個錯誤:
模板型別引數的模板引數必須是一個型別
我讀了這個和這個但是無法理解如何去做或者我做錯了什么。
uj5u.com熱心網友回復:
正如您在std::priority_queue檔案中看到的那樣,第三個模板引數Compare是:
提供嚴格弱排序的比較型別。
函式指標(如您所用)不能用于比較型別。
提供比較型別的一種方法是通過一個類opertor()(最好是const一個):
#include <queue>
class foo {
private:
int buzz;
public:
// Our compare type:
struct Compare
{
bool operator()(const foo* l, const foo* r) const
{ return l->buzz < r->buzz; }
};
//--------------------------------------------------vvvvvvvvvvvv-----
static std::priority_queue<foo*, std::vector<foo*>, foo::Compare> bar;
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/537842.html
標籤:C 指针优先队列
上一篇:指標初始化/取消參考
下一篇:鏈表的C 指標演算法
