[C++] template-Struktur vorwärtsdeklarieren

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
Benutzeravatar
Schrompf
Moderator
Beiträge: 4878
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

[C++] template-Struktur vorwärtsdeklarieren

Beitrag 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?
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
B.G.Michi
Establishment
Beiträge: 163
Registriert: 07.03.2006, 20:38
Alter Benutzername: B.G.Michi
Kontaktdaten:

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

Beitrag 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? :)
Benutzeravatar
BeRsErKeR
Establishment
Beiträge: 689
Registriert: 27.04.2002, 22:01

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

Beitrag von BeRsErKeR »

Oder einfach Header 2 vor Header 1 inkludieren wenns möglich ist.
Ohne Input kein Output.
Benutzeravatar
Schrompf
Moderator
Beiträge: 4878
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

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

Beitrag 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!
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
BeRsErKeR
Establishment
Beiträge: 689
Registriert: 27.04.2002, 22:01

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

Beitrag 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
Ohne Input kein Output.
Benutzeravatar
Krishty
Establishment
Beiträge: 8267
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

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

Beitrag 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:
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Antworten