Boost logo

Boost Users :

From: Joaquín Mª López Muñoz (joaquin_at_[hidden])
Date: 2006-04-07 10:24:16


Parag Gadkari ha escrito:

> I am having trouble while using multi index container with the
> "managed c++" component. Here is the typedef that the compiler won't
> accept.
>
>
> typedef
> multi_index_container<
> gcroot<interface_entity*>,
>
> indexed_by<
> ordered_unique<
> identity<gcroot<interface_entity*> > >,
> ordered_non_unique
> <member<gcroot<interface_entity*>
> , int,&interface_entity::entity_drawingid
> > >,
> >
> > entity_collection;
>
> The real deal is with the member template which needs the address of
> member variable of the interface_entity class. Entity class is an
> abstract Managed type (specified with __gc), and it is not allowed to
> take the address of a non-static member of a managed type.
>
> Does anybody know of a workaround?
>

Hello Parag,

A simple solution is to write a custom key extractor as described at:

http://tinyurl.com/l3g6u

In your particular case, the extractor would look like the following
(warning, uncompiled):

struct entity_drawingid_extractor
{
  typedef int result_type;

  result_type operator()(const gcroot<interface_entity*>& x)const
  {
    return x->entity_drawingid;
  }
};

Does this help? Is this the only problem you've stumbled upon when
using B.MI with Managed C++? I'm curious as reports of usage of
Boost libs in .NET C++-like languages are scarce.

Joaquín M López Muñoz
Telefóinca, Investigación y Desarrollo



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