Я ищу гибридный метаконтейнер/контейнерный класс. Я хочу класс, который отображает тип времени компиляции на значение во время выполнения. Отрывок кода стоит 1 024 слова так:
struct Foo { /* ... */ };
struct Bar { /* ... */ };
int main()
{
meta_container<Foo,float,int> mc;
mc.get<float>() = 1.0f;
mc.get<Foo>().method(blah);
mc.get<Bar>(); //compiler error
}
Это - действительно скучный материал. Реализация с помощью variadic шаблоны была бы достаточно интересна, но интерфейс очень прост.
Часть, которая делает это более трудным, является этой последней функцией, которую я хочу.
void foo( const meta_constainer<Foo,Bar,Baz>& mc );
//make_mc is sorta like make_pair or make_tuple.
int main()
{
foo( make_mc(Foo(), Bar(), Baz()) ); // not really interesting
foo( make_mc(Bar(), Foo(), Baz()) ); // this is more challenging
foo( make_mc(Foo()) ); // this might be difficult as well.
}
Я мог записать такой контейнер, но я хотел бы найти тот, который это уже пишется/отлаживается. Мой самый большой камень преткновения был отсутствием хороших ключевых слов для поиска (неоднородный контейнер не то, что я хочу).
Существует ли библиотека Boost, которая имеет это или подобный интерфейс?
Чем называют эту вещь, таким образом, я могу погуглить ее эффективнее?
обновление:
Я не ищу:
boost::mpl::map
std::map<*,boost::any>
std::map<*,boost::variadic<*>>
std::map<typeid,boost::variadic<*>>