|
Boost Users : |
Subject: Re: [Boost-users] Map runtime value to type
From: dariomt (dariomt_at_[hidden])
Date: 2015-07-31 09:10:02
Michael <mwpowellhtx <at> gmail.com> writes:
>
>
> On July 31, 2015 6:01:04 AM EDT, dariomt <at> gmail.com wrote:
> >Hi all,
> >
> >Say I have a compile-time map of <value,type> pairs, and I need to
> >access
> >the correct element given a value at runtime and do something with
that
> >type. That something would be the same for any of the mapped types
> >(e.g.
> >calling an overloaded function that would then do the right thing
> >depending
> >on the type).
> >
> >The value would typically be an enum.
> >
> >Is there anything in the Boost libraries to help with this?
> >
> >If I used C++11, would there be a simple solution to this?
>
> Not really a boost question, perhaps.
I thought asking if Boost has tools to help with certain C++ problem was
allowed in this list. Please correct me if I'm wrong.
>
> First, I'm not sure why anyone wouldn't leverage at least C++11+.
Especially considering compiler
> advancements in recent history. Optimization technology being what it
is and all.
>
I'd rather use a well tested Boost component than a C++11 solution I have
to implement, test and document.
> That said, if it was me, I might have a look at a std::function (or
boost::function) "type factory" that knew
> how to interface with an instance repository.
>
> Could be a functor instance, as well, for that matter.
>
> >Regards
>
> Cheers.
>
> >PS: I cannot use Boost.Variant
>
> Why not?
>
Sorry, it is clear I didn't explain my problem well enough.
Say I have this code.
struct A {};
struct B {};
enum useType {useA, useB};
template <typename F>
void g(useType w, F f)
{
switch (w)
{
case useA: A a; f(a);
case useB: B b; f(b);
}
}
I need to generalize this to any number of enum values and any number of
corresponding types.
Something like this (pseudocode):
typedef compile_time_map< mpl::pair<useA,A>, mpl::pair<useB,B>, ... >
mapping;
template <typename F>
void g(useType w, F f)
{
switch_apply( w, mapping, f );
}
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