Boost logo

Boost Users :

Subject: Re: [Boost-users] [fusion][?] a dictionary with compile time (or types as) keys
From: Vicente J. Botet Escriba (vicente.botet_at_[hidden])
Date: 2014-02-17 13:22:06


Le 16/02/14 19:30, Nick Stokes a écrit :
> The problem is the following:
>
> class TypeDictionary {
> public:
> // implementation be here -- and the question is about this
> };
>
> struct Foo;
> struct Bar;
>
> void userOfTypeDictionary() {
>
> TypeDictionary td;
> td.insert( Foo() );
> td.insert( Bar() );
> td,insert( double(3.14) );
> // and other unknown (to TypeDictionary)
> // list of types attached
>
> // later on, in a different scope perhaps
> Foo& f = td.get<Foo>() ;
> Bar& f = td.get<Bar>();
> double pi = tg.get<double>();
> // ...
> }
>
>
> Now the question so far seems like right up in the alley of
> Boost.Fusion, perhaps with a boost::fusion::set, but I am unsure how
> to manipulate a set of types unknown ahead of time as in code above,
> and with a -- rather obvious -- extension whereby different instances
> of TypeDictionary would be used to contain a different set of types,
> potentially in different compilation units.
>
>
> As for a realistic motivating use case, think of a plugin manager. At
> any given time of its life an arbitrary heterogeneous set of objects
> are attached to it, and the it is the manager's job to manage the life
> time of the attached objects and return (a reference) to them when
> queried in a type-safe manner.
>
>
> Any ideas on whether such a thing is possible, and how, would be
> deeply appreciated.
>
>
Hi,

we have added to Boost.Application a class aspect_map [1] that is quite
close to your expectations. It could be proposed independently.

There is also a Boost.Mixin proposal that could help also.

HTH,
Vicente

https://github.com/retf/Boost.Application/blob/master/include/boost/application/aspect_map.hpp


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