提升多索引私有成员访问
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<>
#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() {}
我有一个结构
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<>
#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() {}