¿Cómo solucionar una supuesta falta de una declaración de creación de instancias explícita al compilar un CRTP Singleton con Clang?

 C Programming >> Programación C >  >> Tags >> Clang
¿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