私は現在、コードの時点で、演算子に関する情報を保持する構造体をソートする必要がある構文アナライザー クラスを開発しています。各演算子には優先度があり、アナライザー クラスのパブリック メンバー関数を介してユーザーが定義します。したがって、並べ替えるときは、対応する演算子の優先度に基づいて要素を並べ替えるための並べ替え関数が必要です。次のコードを使用して要素を比較しています。
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;
}
この関数はクラス内で定義されているため、静的にする必要があることに注意してください。
実際、私の比較関数は type の要素を比較し、フィールド「priority」を持つop_char
type の要素を含むマップから演算子 def を取得します。op_def
私が直面している問題は、なんとか使用できないことですstd::sort(ops.begin(), ops.end(), std::mem_fun_ref(&parser::op_comp))
(ここで ops はvector of op_info)
メソッドです。次のエラーが表示されますが、これは非常に論理的に聞こえます:
エラー: 静的メンバー関数でのメンバー 'parser::operators' の使用が無効です
これが私の質問です: std::sort に、クラスの非静的メンバーからの要素を利用する comp 関数を強制的に使用させるにはどうすればよいですか? 明らかに関数は非静的であるべきですが、静的にしないとうまく使えません...