Я играю с вариадическими структурами, и я как ребенок с коробкой спичек. Цель состоит в том, чтобы инициализировать вектор указателей базового класса, используя расширение пакета параметров.
Дано:
struct base {
base() {};
virtual ~base() {};
...
};
template<class T>
struct derived : public base {
derived() {};
virtual ~derived() {};
...
};
struct collection {
collection()
: a{ make_shared<derived<int>>(),
make_shared<derived<float>>(),
make_shared<derived<double>>() } {};
~collection() {};
vector<shared_ptr<base>> a;
...
};
Можно ли установить элементы в векторе, используя расширение пакета? Следующее не компилируется, но вы поняли идею. Списки аргументов тоже подойдут.
template<class ...t>
struct collection2 {
collection2() : a{ make_shared<derived<t>>... } {}; //????
~collection2() {};
vector<shared_ptr<base>> a;
};
Так что вы должны быть в состоянии объявить это так:
int main() {
collection2<int,float,double> a;
return 0;
}
В любом случае, спасибо за ваш вклад или предложения по альтернативам.