|
Boost Users : |
From: Matt Steele (steelerm_at_[hidden])
Date: 2005-12-31 02:21:23
I am trying to use Boost.Multi-index (version 1.33.0) to store a set of
boost::tuples, and it appears that const_mem_fun has some difficulties
when the desired member function is inherited from a base class. The
following typedef
typedef multi_index_container<
tuple<int>,
indexed_by< ordered_non_unique< const_mem_fun< tuple<int>,
const int&,
&tuple<int>::get<0>
>
>
>
> my_tuple_container_type;
yields this error (edited for clarity) on my compiler (g++ 4.0.3):
&TupleBaseClass<int>::get' is not a valid template argument for type
'const int& (tuple<int>::*)()const' because it is of type
'const int& (TupleBaseClass<int>::*)const'
note: standard conversions are not allowed in this context
Now the declaration of boost::tuple has something like this:
template <class T>
class tuple : public TupleBaseClass<T> {
public:
typedef typename TupleBaseClass<T> inherited;
...
};
(Also, as far as I can tell, get<0>() is declared and implemented in
TupleBaseClass, not tuple). The public typedef 'inherited' looked
promising, so I modified my code as follows:
typedef multi_index_container<
tuple<int>,
indexed_by< ordered_non_unique< const_mem_fun< tuple<int>::inherited,
const int&,
&tuple<int>::get<0>
>
>
>
> my_tuple_container_type;
and that compiles.
I have a few questions/comments about all this. First of all, is my
compiler correct to generate the error for the first case? Secondly, is
the above workaround satisfactory? My opinion is that it's a little
ungainly; it appears to me that boost::tuple is a derived type for
implementation reasons, and I'd rather not have to know about that fact.
Thank you.
Matt Steele
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