Мой вопрос во многом похож на этот: Передайте пользовательский компаратор через функцию, но я попробовал предложенное там решение , так и не смог заставить его работать.
Короче говоря, у меня есть метод, который хранит несколько отсортированных структур и выполняет несколько сравнений, всегда с элементами типа int
, все используют один и тот же порядок. Порядок определяется при вызове метода.
Предполагаемый вызов будет выглядеть примерно так: myFunction(std::greater<int>());
Сначала я попытался объявить функцию как: void myFunction(binary_operator<int, int, bool> order);
, но, согласно этому объяснению, binary_function
не подходит для работы в качестве базового класса. в вызовах функций.
Наконец, я попробовал предложение из этого ответа (и многих других сайтов), которое предложило < strong>использование шаблонов. Но я все еще не могу скомпилировать свой код.
Минимальный нерабочий пример:
template <typename Comparator>
void myFunction(Comparator order){
if (order(1,2)){
// some stuff
// COMPILES OK
}
std::vector <int> vecToSort;
// ... initialize
std::sort(vecToSort.begin(), vecToSort.end(), order); // works
// COMPILES OK
std::multimap <int, int, order > boundary;
// STARTS KICKING, SCREAMING AND SHOUTHING
}
и ошибка компиляции, которую я получаю:
ошибка: несоответствие типа/значения в аргументе 3 в списке параметров шаблона для «template class std::multimap» ошибка: ожидался тип, получен «порядок»
Я подумал, что один и тот же трюк должен работать для обоих. Это не. (изменить: теперь я вижу проблему type
/object
)
Может кто-нибудь объяснить, что здесь происходит и как заставить multimap
использовать порядок, переданный в качестве аргумента функции ?
PS: я не использую boost для этого проекта.
std::multimap
требуется тип в качестве параметра шаблона, а вы используете объект. - person juanchopanza   schedule 02.05.2013multimap
. - person penelope   schedule 02.05.2013