|
Boost Users : |
Subject: [Boost-users] multi_index_container with protected constructor
From: Horváth Imre (blemidon_at_[hidden])
Date: 2013-07-17 09:07:18
Hi,
I want to use boost::multi_index_container with a class that have
protected constructors, but the compile fails.
I think I should make multi_index_container a friend of my class, but I
don't know how.
#include <iostream>
#include <boost/shared_ptr.hpp>
#include <boost/multi_index_container.hpp>
#include <boost/multi_index/ordered_index.hpp>
#include <boost/multi_index/composite_key.hpp>
#include <boost/multi_index/mem_fun.hpp>
class Item
{
public:
typedef boost::shared_ptr<Item> P;
static P create()
{
return P(new Item());
}
static P create(P item)
{
return P(new Item(item));
}
protected:
Item()
{
}
Item(P item)
: source(item->get_source())
, target(item->get_target())
{
}
public:
std::string source;
std::string target;
std::string get_source() const {return source;}
std::string get_target() const {return target;}
struct key : boost::multi_index::composite_key<
P,
boost::multi_index::const_mem_fun<Item, std::string,
&Item::get_source>,
boost::multi_index::const_mem_fun<Item, std::string,
&Item::get_target>
>{};
typedef boost::multi_index_container<
P,
boost::multi_index::indexed_by<
boost::multi_index::ordered_non_unique<
key,
boost::multi_index::composite_key_result_less<key::result_type>
>
>
> index_t;
};
int main()
{
Item::index_t index;
Item::P t1 = Item::create();
index.insert(t1);
return 0;
}
Thanks in advance:
Imre Horvath
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net