Я пытаюсь создать пользовательскую сортировку для вектора указателей классов, используя предикат сортировки:
struct sort_by_airtime
{
inline bool operator() (const Network *n1, const Network *n2)
{
return (n1->airtime() < n2->airtime());
}
};
Для каждой сети мы сортируем по значению с плавающей точкой, возвращаемому функцией airtime ().
Теперь я попытаюсь использовать это следующим образом:
std::vector<Network *> Simulator::sort_networks(std::vector<Network *> netlist, bool sort_airtime) {
std::vector<Network *> new_netlist = netlist;
if(sort_airtime) {
sort(new_netlist.begin(), new_netlist.end(), sort_by_airtime());
}
}
Однако я получаю много ошибок, подобных этой:
In file included from Simulator.cpp:7:
Simulator.h: In member function ‘bool Simulator::sort_by_airtime::operator()(const Network*, const Network*)’:
Simulator.h:48: error: passing ‘const Network’ as ‘this’ argument of ‘virtual float Network::airtime()’ discards qualifiers
Simulator.h:48: error: passing ‘const Network’ as ‘this’ argument of ‘virtual float Network::airtime()’ discards qualifiers
Правильно ли я указываю аргумент, передаваемый предикату? airtime () реализуется классами, которые наследуют класс Network.