Vorlagenvorlagenklassenargument als Parameter @ verwend

Modern C ++ Design gibt das folgende Beispiel:

template <class T> struct EnsureNotNull
{
    static void Check(T*& ptr)
    {
      if (!ptr) ptr = GetDefaultValue();
    }
};

template
<
   class T,
   template <class> class CheckingPolicy = EnsureNotNull,
   template <class> class ThreadingModel
>
class SmartPtr
  : public CheckingPolicy<T>
  , public ThreadingModel<SmartPtr>
{
...
  T* operator->()
  {
    typename ThreadingModel<SmartPtr>::Lock guard(*this);
    CheckingPolicy<T>::Check(pointee_);
    return pointee_;
  }
private:
  T* pointee_;
};

Ich konnte mir nicht vorstellen, wie das ThreadingModel-Template so aufgebaut sein würde, dass es SmartPtr als Parameter akzeptiert. Wie kann das möglich sein?

Bearbeiten

Ich habe versucht Potatoswatter (sorry lol) Kommentar:

template <class SmartPtr> struct SingleThreadingModel
{
  class Lock
  {
    public: 
      Lock(SmartPtr&)
      {
      }
  };
};

aber es hat nicht funktioniert.

hier ist der Fehler, den gcc mir gibt:

main.cpp:28:35: error: type/value mismatch at argument 1 in template parameter list for ‘template<class> class ThreadingModel’
main.cpp:28:35: error:   expected a type, got ‘SmartPtr’

Antworten auf die Frage(4)

Ihre Antwort auf die Frage