我知道如何创建一个用作自定义地图比较器的函数:
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;
}
您有以下几种选择:
在 C++11 中,您可以使用 lambda:
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);
如果函数是非静态的,则创建一个静态包装器(成员或非成员),并从中调用成员函数。