Контейнеры Boost MultiIndex работают с унаследованными членами класса? - PullRequest
1 голос
/ 11 февраля 2011

Я хотел бы использовать многоиндексный контейнер boost с иерархией классов.Это возможно?

Если я попытаюсь:

#include <boost/multi_index_container.hpp>
#include <boost/multi_index/ordered_index.hpp>
#include <boost/multi_index/identity.hpp>
#include <boost/multi_index/member.hpp>

using namespace ::boost;
using namespace ::boost::multi_index;

class A{
    public:
        int m;
        A(int p = 0){m = p;};
};

class B: public A{
    public:
        int n;
        B(int p = 0, int q = 0): A(p){ n = q;};
 }; 


typedef multi_index_container<
    B,
    indexed_by<
        ordered_unique<identity<B> >,
        ordered_non_unique<member<B, int, &B::m> >
    > 
> mindex;

int main(void){
    return 0;
}

Я получу следующие ошибки:

multiindextest.cpp:25: error: could not convert template argument ‘&A::m’ to ‘int B::*’
multiindextest.cpp:25: error: template argument 1 is invalid
multiindextest.cpp:26: error: template argument 2 is invalid
multiindextest.cpp:27: error: template argument 2 is invalid
multiindextest.cpp:27: error: invalid type in declaration before ‘;’ token

Если изменить строку 25 на:

ordered_non_unique<member<B, int, &B::n> >

Компилируется нормально.Любая помощь приветствуется.Спасибо.

1 Ответ

2 голосов
/ 11 февраля 2011

Я не совсем уверен, если это то, что вы ищете, но вы можете изменить строку 25 на:

ordered_non_unique<member<A, int, &A::m> >

Это компилируется на gcc 4.4.

С уважением, Ларс.

...