20 class Collection :
public std::vector<std::shared_ptr<T>>
27 template<
typename... T_>
28 requires ((std::is_base_of_v<T,T_>
29 && !std::is_same_v<Collection<T>,T_>) && ...)
30 Collection(
const T_&... x)
32 (push_object_back(x), ...);
35 template<
typename... T_>
36 requires (std::is_same_v<std::shared_ptr<T>,std::shared_ptr<T_>> && ...)
37 Collection(
const std::shared_ptr<T_>&... x)
38 : std::vector<std::shared_ptr<T>>({x...})
41 Collection(
const Collection<T>& c)
42 : std::vector<std::shared_ptr<T>>(c.size())
44 for(
size_t i = 0 ; i < c.size() ; i++)
45 (*this)[i] = std::dynamic_pointer_cast<T>(c[i]->copy());
49 requires std::is_base_of_v<T,T_>
50 void push_object_back(
const T_& x)
52 this->push_back(std::make_shared<T_>(x));