¿Cómo solucionar una supuesta falta de una declaración de creación de instancias explícita al compilar un CRTP Singleton con Clang?
La solución más simple es definir instance_
en SingletonBase.hh:
template < class T > class SingletonBase {
public:
static T * get_instance() {
if ( ! instance_ ) {
instance_ = T::create_singleton_instance();
}
return instance_;
}
private:
static T * instance_;
};
template <typename T>
T* SingletonBase<T>::instance_ = nullptr;
Sin embargo, no veo el punto de SingletonBase
si vas a confiar en T::create_singleton_instance()
para crear la instancia. También podría implementar get_instance()
en la clase derivada.
Usar un CRTP para implementar el patrón singleton solo tiene sentido si la clase base puede construir una instancia de la clase derivada usando el constructor predeterminado.
template < class T > class SingletonBase {
public:
static T& get_instance() {
static T instance_;
return instance_;
}
private:
};
Lectura adicional:Cómo implementar singleton seguro multihilo en C++ 11 sin usar