81 void set(
const T* aspect);
87 void set(std::unique_ptr<T>&& aspect);
90 template <
class T,
typename... Args>
91 T* createAspect(Args&&... args);
101 std::unique_ptr<T> releaseAspect();
105 static constexpr bool isSpecializedFor();
115 bool _has(type<T>)
const;
118 bool _has(type<SpecAspect>)
const;
125 SpecAspect* _get(type<SpecAspect>);
129 const T* _get(type<T>)
const;
132 const SpecAspect* _get(type<SpecAspect>)
const;
139 void _set(type<T>,
const T* aspect);
142 void _set(type<SpecAspect>,
const SpecAspect* aspect);
149 void _set(type<T>, std::unique_ptr<T>&& aspect);
152 void _set(type<SpecAspect>, std::unique_ptr<SpecAspect>&& aspect);
155 template <
class T,
typename... Args>
156 T* _createAspect(type<T>, Args&&... args);
159 template <
typename... Args>
160 SpecAspect* _createAspect(type<SpecAspect>, Args&&... args);
164 void _removeAspect(type<T>);
167 void _removeAspect(type<SpecAspect>);
171 std::unique_ptr<T> _releaseAspect(type<T>);
174 std::unique_ptr<SpecAspect> _releaseAspect(type<SpecAspect>);
178 static constexpr bool _isSpecializedFor(type<T>);
181 static constexpr bool _isSpecializedFor(type<SpecAspect>);