【发布时间】:2013-11-10 03:06:31
【问题描述】:
我知道如何创建一个用作自定义地图比较器的函数:
std::map<std::string, std::string, bool (*)(std::string, std::string)> myMap(MapComparator);
bool MapComparator(std::string left, std::string right)
{
return left < right;
}
但我不知道如何对 member 函数做同样的事情:
bool MyClass::MapComparator(std::string left, std::string right)
{
return left < right;
}
【问题讨论】:
-
必须是非静态成员函数吗?鉴于您的示例,您可以只声明成员函数
static,因为它不访问任何非静态数据成员。 -
创建仿函数或使用直接 lambda 可能会很好。
myMap(MapComparator)到底应该做什么? -
@jogojapan 当然,它没有! 不过还没想到。谢谢。不过,如果可能的话,我想看看使用非静态成员函数的语法。 @WhozCraig 出于某些原因,我更喜欢成员函数而不是仿函数。而且我使用的是 VS2010,我不确定它是否支持 lambdas。
myMap(MapComparator)在我班级的初始化列表中,我修复了示例代码。 -
@NPS 你不应该喜欢它。除其他事项外,成员需要一个
this指针,该指针不能在 编译 时提供(映射比较器不像std::sort的比较器那样使用)。其次,即使您使用静态或全局函数,函数 pointers 也会使 糟糕 比较器。它们不值得内联,而适当地公开函数运算符的 type(例如 lambda 或 functor)做得非常好(通常,无论如何)。
标签: c++ comparator stdmap member-function-pointers