В настоящее время я разрабатываю класс синтаксического анализатора, который в точке кода должен сортировать структуры, содержащие информацию об операторах. Каждый оператор имеет приоритет, который определяется пользователем через публичные функции-члены моего класса анализатора. Таким образом, при сортировке мне нужна моя функция сортировки для упорядочивания элементов на основе приоритета соответствующего оператора. Я использую следующий код для сравнения элементов:Использование нестатического члена класса внутри функции сравнения
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
, и я извлекаю оператор def из карты, содержащей элементы типа op_def
, которые имеют поле «приоритет».
Проблема я столкнулся в том, что я не могу управлять использовать std::sort(ops.begin(), ops.end(), std::mem_fun_ref(&parser::op_comp))
(где OPS является vector of op_info)
метод, который я получаю следующую ошибку, которая звучит вполне логично:.
Ошибка: неправильное использование элемента ` parser :: operator 'в статической функции-члене
Вот мой вопрос: как я могу заставить std :: sort использовать функцию comp, которая использует элементы из нестатических членов класса? Очевидно, функция должна быть нестатический, но я не могу его использовать, если я не статирую его ...
Заранее благодарим за помощь, CFP.
Отлично! Это действительно работает очень хорошо. –