提升多索引私有成员访问

Boost multi index private members access

我有一个结构

struct employee
{
  int         id;
  std::string name;

  employee(int id,const std::string& name):id(id),name(name){}

  bool operator<(const employee& e)const{return id<e.id;}

  getId(){return id;}
  getName(){return name;}
};

如果我从教程中像这样制作 boost 多索引,一切都很好

typedef multi_index_container<
  employee,
  indexed_by<
    // sort by employee::operator<
    ordered_unique<identity<employee> >,

    // sort by less<string> on name
    ordered_non_unique<member<employee,std::string,&employee::name> >
  > 
> employee_set;

但是如果我将 employee 结构的成员设为私有,那么我将无法将 em 用作容器的键。我试过将指针指向 getter 这样的函数 &emploeyy::getName 但它没有解决问题。

所以我的问题是:如何使用私有成员作为多索引容器的键?

有许多密钥提取器可供使用。在文档中找到预定义的:http://www.boost.org/doc/libs/1_66_0/libs/multi_index/doc/tutorial/key_extraction.html#predefined_key_extractors

您可以使用 mem_fun<>const_mem_fun

而不是 member<>

Live On Coliru

#include <string>

class employee {
    int id;
    std::string name;

  public:
    employee(int id, const std::string &name) : id(id), name(name) {}

    bool operator<(const employee &e) const { return id < e.id; }

    int getId() const { return id; }
    std::string getName() const { return name; }
};

#include <boost/multi_index/mem_fun.hpp>
#include <boost/multi_index/ordered_index.hpp>
#include <boost/multi_index_container.hpp>

namespace bmi = boost::multi_index;
typedef bmi::multi_index_container<
    employee,
    bmi::indexed_by<
        bmi::ordered_unique<bmi::identity<employee> >,
        bmi::ordered_non_unique<bmi::const_mem_fun<employee, std::string, &employee::getName> >
    > > employee_set;

int main() {}