I have this collection:
vector<unique_ptr<Light>>* lights;
I have many descendants of the Light class, like DirectionalLight, PointLight and so on.
I wish to store all descendants of Light within that lights vector like so:
template<typename T>
unique_ptr<T> CreateLight()
{
static_assert(std::is_base_of<Light, T>::value, "Type must of descendant of type Light. ");
unique_ptr<T> light(new T());
lights->emplace_back(light);
return light;
}
The reason for this method is that I store my light in a collection for my renderer, which will do its magic to make the lights affect the shaders.
EDIT
These collections are parts of a class named Scene. I need them all the time and I need to have all Light instances on the heap (together with all the other instances the Scene class has).
Every frame the Renderer will go through the collection of lights to affect the scene objects' shaders with them. Accessing this vector any given time is of paramount importance.
I still need a reference to my light in the scene though so I can manipulate its properties.
The error message is this:
Severity Code Description Project File Line Suppression State
Error C2664 'std::unique_ptr<Light,std::default_delete<_Ty>>::unique_ptr(const std::unique_ptr<_Ty,std::default_delete<_Ty>> &)': cannot convert argument 1 from 'std::unique_ptr<DirectionalLight,std::default_delete<_Ty>>' to 'std::nullptr_t'
This fails during build, not runtime. I, of course, took a look at answers like this one but to no avail.
I require assistance to get this sorted out.