Explizite statische Elementinstanziierung für Vorlagen in einer abgeleiteten Klasse

Ich versuche, eine Vorlagenklasse mit einem statischen Member zu implementieren. Klassen, die von der Vorlagenklasse abgeleitet sind, müssen instanziiert werden, ohne dass zusätzlicher Code geschrieben werden muss.

Hier ist mein naiver (und nicht erfolgreicher) Ansatz:

Singleton.h:

template <class T> class Singleton {
protected:
  Singleton();
  static T instance_;
}

// explicit instantiation of 'instance_' ???, 
// where 'instance_' is an instance of the derived class
template <class T> T Singleton<T>::instance_;

ConcreteA.h:

class ConcreteA : public Singleton<ConcreteA> {
public:
  ConcreteA();
  void foo();
}

Haupt c

int main() {
  // an instance of ConcreteA should have been created (no extra code)!!!
  return 0;
}

ibt es eine Möglichkeit, die Instanziierung von @ zu erzwingeConcreteA von nur ableitenConcreteA vonSingleton, ohne zusätzlichen Instantiierungscode zu schreiben?

A Schmutzige Problemumgehung soll eine Methode auf @ aufrufinstance_ in demConcreteA Konstruktor, zum Beispiel:

ConcreteA.c

ConcrereA::ConcreteA { instance_.foo(); }

ibt es bessere Workaround

Antworten auf die Frage(8)

Ihre Antwort auf die Frage