Я ищу гибридный мета-контейнер / контейнерный класс.Мне нужен класс, который отображает тип времени компиляции на значение времени выполнения.Фрагмент кода стоит 1024 слова, поэтому:
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
}
Это действительно скучный материал.Реализация, использующая шаблоны с переменным числом аргументов, была бы достаточно интересной, но интерфейс очень прост.
Часть, которая усложняет эту задачу, - это последняя функция, которую я хочу.
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<*>>
Это близко к тому, что я хочу, за исключением того, что оно использует RTTI и не являетсяошибка компиляции при обращении с неверным типом.