Функция-член как компаратор карт?
Я знаю, как создать функцию, которая служит в качестве пользовательского компаратора карт:
std::map<std::string, std::string, bool (*)(std::string, std::string)> myMap(MapComparator);
bool MapComparator(std::string left, std::string right)
{
return left < right;
}
Но я не знаю, как сделать то же самое с членом функции:
bool MyClass::MapComparator(std::string left, std::string right)
{
return left < right;
}
1 ответ:
У вас есть несколько вариантов:
В C++11 можно использовать лямбду:
std::map<std::string, std::string, bool (*)(std::string, std::string)> myMap( [](string lhs, int rhs){ // You may need to put [this] instead of [] to capture the enclosing "this" pointer. return MapComparator(lhs, rhs); // Or do the comparison inline });
Если функция статична, используйте синтаксис
::
:class MyClass { public: static bool MyClass::MapComparator(std::string left, std::string right); }; ... std::map<std::string, std::string, bool (*)(std::string, std::string)> myMap(MyClass::MapComparator);
Если функция нестатична, создайте статическую оболочку, член или не член, и вызовите из нее функцию-член.