Параметр шаблона для std::multiset
ожидает типа, MyObjectComp
не тип, но вместо этого имя функции. Вы можете использовать decltype
, чтобы получить его тип, как
typedef std::multiset<MyObject, decltype(MyObjectComp)*> MyObjectMultiSet;
Или вы можете указать тип себя как
typedef std::multiset<MyObject, bool(*)(const MyObject&, const MyObject&)> MyObjectMultiSet;
Также обратите внимание, что в целом функтор/лямбда более ЭФФЕКТИВНАЯ, чем при использовании функции как компилятор может более легко оптимизировать код. Я предложил бы использовать
struct MyObjectComp {
bool operator()(const MyObject& lhs, const MyObject& rhs) {
return lhs.mTick < rhs.mTick;
}
};
typedef std::multiset<MyObject, MyObjectComp> MyObjectMultiSet;
или
auto MyObjectComp = [](const MyObject& lhs, const MyObject& rhs) {
return lhs.mTick < rhs.mTick;
};
typedef std::multiset<MyObject, decltype(MyObjectComp)> MyObjectMultiSet;
Возможный дубликат [Использование пользовательских зЬй :: установить компаратор] (http://stackoverflow.com/questions/2620862/using-custom-stdset-comparator) – ashiquzzaman33