Станд.:: отобразитесь как контейнер, который отображает типы на значения

Я ищу гибридный метаконтейнер/контейнерный класс. Я хочу класс, который отображает тип времени компиляции на значение во время выполнения. Отрывок кода стоит 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<*>>
    Это близко к тому, что я хочу за исключением того, что это использует RTTI, и это не ошибка компиляции, если получено доступ с неправильным типом.
7
задан deft_code 20 October 2010 в 16:31
поделиться