|
Boost Users : |
Subject: Re: [Boost-users] [multi-index] Container of polymorphic pointers
From: Daniel Dilts (diltsman_at_[hidden])
Date: 2008-10-30 20:49:04
I appreciate the help. This worked perfectly.
On Thu, Oct 30, 2008 at 1:10 AM, Joaquin M Lopez Munoz <joaquin_at_[hidden]>wrote:
> Daniel Dilts <diltsman <at> gmail.com> writes:
>
> > I'm am using boost::multi_index to hold a set of polymorphic entities.
> > Due to efficiency concerns, I have to be able sort the container based
> > on actual type. I was planning on sorting based on the return result of
> > typeid. When I try this I get errors in <functional>. I am using
> > VC++ 2005 Standard Edition SP1. What am I doing wrong, or, what is a
> > better way of accomplishing what I am trying to do?
> >
> [...]
> > struct extractType
> > {
> > typedef const type_info& result_type;
>
> Here is the first problem: you've got to define
>
> typedef type_info result_type
>
> and let operator() return value be const result_type& (instead
> of the current return_type).
>
> Past the first hurdle you'll find that type_info is not comparable
> with <, so you'll also need to provide a custom comparer for this type
> based on type_info::before. The following summarizes all the changes
> needed (note: do not forget to include <typeinfo>; also, you're using
> type_info instead of std::type_info, which seems to work in VS but is not
> standard as far as I know):
>
> namespace Entities
> {
> struct type{};
> struct extractType
> {
> typedef std::type_info result_type;
>
> const result_type& operator()(const Entity * r)const
> {
> return typeid(*r);
> }
> };
> struct lessType
> {
> bool operator()(const std::type_info& x, const std::type_info& y)const
> {
> return x.before(y);
> }
> };
> typedef boost::multi_index::multi_index_container<
> Entity *,
> boost::multi_index::indexed_by<
> boost::multi_index::ordered_non_unique<
> boost::multi_index::tag<type>, extractType, lessType
> >
> >
> > EntityContainer;
> };
>
> Hope this helps. Thank you for using Boost.MultiIndex.
>
> Joaquín M López Muñoz
> Telefónica, Investigación y Desarrollo
>
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/boost-users
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