我目前正在開發一個syntaxic分析器類,它需要在代碼的某個位置對結構進行排序,以保存關於運算符的信息。每個操作員都有一個優先級,這是用戶定義的,通過我的分析器類的公共成員函數。因此,在排序時,我需要我的排序功能根據相應運算符的優先級排序元素。我使用下面的代碼比較元素:在比較函數中使用非靜態類成員
bool parser::op_comp(const op_info& o1, const op_info& o2) {
op_def& op1 = operators[o1.op_char];
op_def& op2 = operators[o2.op_char];
return op1.priority > op2.priority;
}
注意,我不得不做出這個功能靜態的,因爲它是一個類的內部定義。
實際上,我的比較函數比較了op_char
類型的元素,並且我從包含op_def
類型元素(其中具有「優先級」字段的元素)的映射中檢索運算符def。
我面臨的問題是,我不能管理使用std::sort(ops.begin(), ops.end(), std::mem_fun_ref(&parser::op_comp))
(其中OPS是vector of op_info)
方法我碰到下面的錯誤,這聽起來很符合邏輯:
錯誤:使用無效成員`解析器::運營商'在靜態成員函數
這裏是我的問題:我怎麼能強制std :: sort使用從非靜態成員類的元素的使用comp函數?很顯然,函數應該是非靜電,但我不能設法使用它,如果我不使它靜態...
在此先感謝您的幫助, CFP。
太棒了!這確實很有效。 – 2009-11-14 18:42:25