[multi_index] How to use a class instead of a struct with the boost:multi_index_container? (addendum)
Hi All, Since I posted the previous message, I made some experiments. First, I changed the employee from struct to class: From struct employee { int id; std::string name; int age; employee(int id_,std::string name_,int age_):id(id_),name(name_),age(age_){} friend std::ostream& operator<<(std::ostream& os,const employee& e) { os<<e.id<<" "<<e.name<<" "<<e.age<<std::endl; return os; } }; to class employee { int id; std::string name; int age; employee(int id_,std::string name_,int age_):id(id_),name(name_),age(age_){} friend std::ostream& operator<<(std::ostream& os,const employee& e) { os<<e.id<<" "<<e.name<<" "<<e.age<<std::endl; return os; } }; I got some errors /home/jamaj/src/wxTestes/multiindexsample/main.cpp|31|error: ‘int employee::id’ is private /home/jamaj/src/wxTestes/multiindexsample/main.cpp|69|error: within this context| typedef multi_index_container< employee, indexed_by< ordered_unique< tag<id>, BOOST_MULTI_INDEX_MEMBER(employee,int,id)>, ordered_non_unique< tag<name>,BOOST_MULTI_INDEX_MEMBER(employee,std::string,name)>, ordered_non_unique< tag<age>, BOOST_MULTI_INDEX_MEMBER(employee,int,age)> >
employee_set;
So, I had to change the scope of index class members to public, and it worked: class employee { public: int id; std::string name; int age; employee(int id_,std::string name_,int age_):id(id_),name(name_),age(age_){} friend std::ostream& operator<<(std::ostream& os,const employee& e) { os<<e.id<<" "<<e.name<<" "<<e.age<<std::endl; return os; } }; The question is: is there any other way to do it without exposing all class members? Thanks in advance. Best Regards. José Augusto Jr. jamaj
jamaj escribió:
Hi All,
Since I posted the previous message, I made some experiments. First, I changed the employee from struct to class:
[...]
I got some errors
/home/jamaj/src/wxTestes/multiindexsample/main.cpp|31|error: ‘int employee::id’ is private
[...] So, I had to change the scope of index class members to public, and it worked:
[...]
The question is: is there any other way to do it without exposing all class members?
You can expose the data you want to index by through some member function, check the examples at: http://www.boost.org/libs/multi_index/doc/tutorial/key_extraction.html#const... HTH, Joaquín M López Muñoz Telefónica, Investigación y Desarrollo
participants (2)
-
jamaj
-
joaquin@tid.es