В C++ я хотел бы создать новый элемент (shared_ptr) для каждого типа, указанного в списке типов (и добавить результирующие указатели к вектору). В псевдокоде, это должно выглядеть примерно так:Как создать элемент для каждого типа в списке типов и добавить его в вектор в C++?
vector< shared_ptr<baseT> > v;
foreach(type T: <derivedT1, derivedT2, ..., derivedTn>)
{
v.emplace_back(make_shared<T>());
}
Есть краткое решение для этого с помощью std
или boost
(MPL, Fusion,?)?
Некоторые исследования:
- я нашел что-то подобное в type visitor over typelist in c++. К сожалению, я в настоящее время не могу представить, как заменить
sizeof
с этой должности кодом создания из приведенного выше примера и как инкапсулировать необходимые определения для краткого использования. - В boost MPL и Fusion я еще не смог найти подходящий итерационный алгоритм, работающий только с типом (без экземпляра этого типа).
Я глубоко впечатлен лаконичностью и универсальностью вашего решения на основе ханы. Это было именно то, что я искал. - К сожалению, в настоящее время я не могу изменить среду разработки, которая отвечает требованиям hana (например, компилятор полностью соответствует стандарту C++ 14). Я с нетерпением жду, чтобы хана включилась в форсирование. –
Я чувствую, что это именно то, что мне нужно. У меня есть список типов и хочу что-то сделать для каждого элемента в этом списке типов, например, по умолчанию - построить элемент каждого типа и вставить его в контейнер. это решает мою проблему элегантно. – ofloveandhate
Я рад, что это помогает! –