56 T*
add(Args&&... args) {
57 if constexpr (std::is_base_of_v<animation::Timeline, T>)
58 return (T*)timelines_.emplace_back(std::make_unique<T>(args...))
60 else if constexpr (std::is_base_of_v<animation::AbsAnimation, T>)
61 return (T*)animations_.emplace_back(std::make_unique<T>(args...))
63 else if constexpr (std::is_base_of_v<mobject::AbsMObject, T>)
64 return (T*)mobjects_.emplace_back(std::make_unique<T>(args...))
66 else if constexpr (std::is_base_of_v<camera::AbsCamera, T>)
67 return (T*)cameras_.emplace_back(std::make_unique<T>(args...))
70 static_assert(
false,
"unsupported type");
80 T*
add(std::unique_ptr<T>&& obj) {
81 if constexpr (std::is_base_of_v<object_t, T>)
82 return (T*)mobjects_.emplace_back(std::move(obj)).get();
83 else if constexpr (std::is_base_of_v<camera::AbsCamera, T>)
84 return (T*)cameras_.emplace_back(std::move(obj)).get();
85 else if constexpr (std::is_base_of_v<animation::AbsAnimation, T>)
86 return (T*)animations_.emplace_back(std::move(obj)).get();
87 else if constexpr (std::is_base_of_v<animation::Timeline, T>)
88 return (T*)timelines_.emplace_back(std::move(obj)).get();
90 static_assert(
false,
"unsupported type");
101 if constexpr (std::is_base_of_v<object_t, T>)
102 return (T*)mobjects_.emplace_back(obj).get();
103 else if constexpr (std::is_base_of_v<camera::AbsCamera, T>)
104 return (T*)cameras_.emplace_back(obj).get();
105 else if constexpr (std::is_base_of_v<animation::AbsAnimation, T>)
106 return (T*)animations_.emplace_back(obj).get();
107 else if constexpr (std::is_base_of_v<animation::Timeline, T>)
108 return (T*)timelines_.emplace_back(obj).get();
110 static_assert(
false,
"unsupported type");
121 if constexpr (std::is_base_of_v<object_t, T>)
122 return (T*)mobjects_.emplace_back(std::move(obj)).get();
123 else if constexpr (std::is_base_of_v<camera::AbsCamera, T>)
124 return (T*)cameras_.emplace_back(std::move(obj)).get();
125 else if constexpr (std::is_base_of_v<animation::AbsAnimation, T>)
126 return (T*)animations_.emplace_back(std::move(obj)).get();
127 else if constexpr (std::is_base_of_v<animation::Timeline, T>)
128 return (T*)timelines_.emplace_back(std::move(obj)).get();
130 static_assert(
false,
"unsupported type");