2

我知道如何创建一个用作自定义地图比较器的函数:

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;
}
4

1 回答 1

2

你有几个选择:

在 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);

如果函数是非静态的,则制作一个静态包装器、成员或非成员,并从中调用成员函数。

于 2013-11-10T03:25:21.457 回答