2 Stimmen

Definition der Schablonenfunktion in der Schablonenklasse (C++)

Ich habe die folgende Vorlagenklasse, deklariert in einer .hpp-Datei mit der Implementierung in einer .inl-Datei am Ende der .hpp-Datei enthalten. Sie verfügt über einen Kopiervorlagenkonstruktor, aber ich weiß nicht und kann nirgendwo die korrekte Syntax für die Implementierung des Kopiervorlagenkonstruktors in der .inl-Datei finden. Kennt jemand die korrekte Syntax dafür?

Inhalt von Foo.hpp

template <class X>
class Foo
{
public:
    explicit Foo(Bar* bar);    

    //I would like to move the definition of this copy ctor to the .inl file
    template <class Y> explicit Foo(Foo<Y> const& other) :
       mBar(other.mBar)
    {
      assert(dynamic_cast<X>(mBar->someObject()) != NULL);
      //some more code
    }

    void someFunction() const;

private:
    Bar* mBar;
}
#include Foo.inl

Inhalt von Foo.inl

template <class X>
Foo<X>::Foo(Bar* bar) : 
   mBar(bar)
{
   //some code
}

template <class X>
Foo<X>::someFunction()
{
    //do stuff
}

5voto

sth Punkte 210180

Für den Konstruktor gibt es zwei verschachtelte Vorlagen, und Sie müssen beide angeben, wenn Sie ihn in der .inl-Datei definieren:

template <class X>
template <class Y>
Foo<X>::Foo(Foo<Y> const& other) : mBar(other.mBar) {
   assert(dynamic_cast<X>(mBar->someObject()) != NULL);
   //some more code
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X