Boost logo

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