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