Я хочу иметь приоритетную очередь с настраиваемым порядком, но как бы я ни был ленив, я не хочу определять класс компаратора, реализующий operator ().
Мне бы очень хотелось, чтобы что-то подобное скомпилировали:
std::priority_queue<int, std::vector<int>,
boost::bind(some_function, _1, _2, obj1, obj2)> queue;
где some_function - это функция, возвращающая bool, принимающая четыре аргумента, первый и второй - целые числа очереди, а два последних - некоторые объекты, необходимые для вычисления порядка (ссылки на константы).
(ошибка: «boost :: bind» не может появиться в константном выражении)
Но это не компилируется. Даже более простой
std::priority_queue<int, std::vector<int>, &compare> queue;
не будет компилироваться, поскольку compare является двоичной функцией, возвращающей bool.
(ошибка: несоответствие типа / значения в аргументе 3 в списке параметров шаблона для «template class std :: priority_queue»; ожидался тип, получил «сравнить»)
Какие-либо предложения?
boost::bind
здесь - перед ›параметрами шаблона очереди. Это опечатка в опубликованном коде или в том, что вы пытались скомпилировать? - person Steve Townsend   schedule 15.11.2010