提升多索引私有成员访问权限

时间:2018-02-16 18:49:10

标签: c++ boost boost-multi-index

我有一个结构

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

如果我在教程中使用这样的提升多索引一切正常

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 struct的成员设为私有,那么我就失去了使用em作为容器密钥的能力。我尝试将指针放到像&emploeyy::getName这样的getter函数中,但它没有解决问题。

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

1 个答案:

答案 0 :(得分:2)

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

您可以使用member<>mem_fun<>来代替const_mem_fun

<强> 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() {}