On 31.07.2015 15:10, dariomt wrote:
Michael
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
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
, mpl::pair , ... > mapping; template <typename F> void g(useType w, F f) { switch_apply( w, mapping, f ); }
Why not:
std::map