Seite 1 von 1

[C++] template-Struktur vorwärtsdeklarieren

Verfasst: 12.08.2013, 15:03
von Schrompf
Moin Leute,

eine kurze Frage, weil ich da grade partout nicht draufkomme. Ich habe in einem Header eine Klassenmethode deklariert.

Code: Alles auswählen

class Bla {
void MachWas( const MeineStruktur& struktur);
}
Das Problem ist nun, dass MeineStruktur ein typedef einer template-Struktur ist, die erst später in einem anderen Header deklariert wird. Die sort dort sinngemäß so aus:

Code: Alles auswählen

// anderer Header
template <typename T> struct TemplStruktur { ... };
typedef TemplStruktur<MeineDaten> MeineStruktur;
Wie müsste jetzt eine Vorwärtsdeklaration im ersten Header aussehen, damit der Compiler sich nicht über eine Neudefinition mit inkompatiblen Basistypen beschwert?

Re: [C++] template-Struktur vorwärtsdeklarieren

Verfasst: 12.08.2013, 15:17
von B.G.Michi

Code: Alles auswählen

#include <stdio.h>

// header 1
class MeineDaten;
template <typename T> struct TemplStruktur;
typedef TemplStruktur<MeineDaten> MeineStruktur;

class Bla
{
public:
void MachWas( const MeineStruktur& struktur);
};

// header 2
class MeineDaten { int x; };
template <typename T> struct TemplStruktur { void foo(void) {} };
typedef TemplStruktur<MeineDaten> MeineStruktur;

// cpp 1
void Bla::MachWas(const MeineStruktur& struktur)
{
  printf("MachWas");
}

int main(void)
{
  Bla b;
  b.MachWas(MeineStruktur());
}
wo liegt das Problem? :)

Re: [C++] template-Struktur vorwärtsdeklarieren

Verfasst: 12.08.2013, 17:10
von BeRsErKeR
Oder einfach Header 2 vor Header 1 inkludieren wenns möglich ist.

Re: [C++] template-Struktur vorwärtsdeklarieren

Verfasst: 12.08.2013, 19:52
von Schrompf
Nein, das ist nicht möglich. Aber ich stand irgendwie auf dem Schlauch, was das Vorwärtsdeklarieren einer template-Klasse angeht. Danke für's Erhellen!

Re: [C++] template-Struktur vorwärtsdeklarieren

Verfasst: 12.08.2013, 22:05
von BeRsErKeR
Das ist übrigens sehr "lustig" wenn man Typen aus der STL forwarden will... Das kann dann schonmal 20-zeilig für einen Typ werden. :D

Re: [C++] template-Struktur vorwärtsdeklarieren

Verfasst: 13.08.2013, 05:52
von Krishty
BeRsErKeR hat geschrieben:Das ist übrigens sehr "lustig" wenn man Typen aus der STL forwarden will... Das kann dann schonmal 20-zeilig für einen Typ werden. :D
Erst recht lustig wird es, wenn der Typ im C++-Standard als class deklariert ist und in der VC-STL als struct (oder umgekehrt). Dann darf man auch gleich noch vier Zeilen #if defined _MSC_VER reinklatschen :roll: