Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

11

15.10.2011, 23:01

Jo, hat mit der Frage an sich nicht viel zu tun gehabt, wahr eher so eine Randbemerkung ;)

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

12

15.10.2011, 23:15

Ich vermute mal, dass er eigentlich folgendes will:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
// Header

namespace FileBinary
{
  template<class T>
  std::ostream& writeBinary(std::ostream& stream, const T& value);

  // Spezialisierung deklarieren
  template<>
  std::ostream& writeBinary<std::string>(std::ostream& stream, const std::string& value);

  // Instanz deklarieren
  extern template
  std::ostream& writeBinary<std::string>(std::ostream& stream, const std::string& value);
}


// cpp File

namespace FileBinary
{
  // Spezialisierung definieren
  template<>
  std::ostream& writeBinary<std::string>(std::ostream& stream, const std::string& value)
  {
    stream.write(reinterpret_cast<const char*>(&value),sizeof(value));
    return stream;
  }


  // template Instanzieren
  template std::ostream& writeBinary<std::string>(std::ostream& stream, const std::string& value);
}


Die Template-Argumente muss man bei einer Spezialisierung übrigens tatsächlich nicht angeben, sofern sie deduzierbar sind, das war ein Irrtum meinerseits.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »dot« (15.10.2011, 23:23)


kiba

Alter Hase

  • »kiba« ist der Autor dieses Themas

Beiträge: 327

Wohnort: NRW

Beruf: Azubi: Fach-Info. Anw.

  • Private Nachricht senden

13

16.10.2011, 12:14

ok, thx dot hat alles geklappt.
Aber warum muss so ein umweg gemacht werden mit extern und so.
Ist das nicht so das man in der Header die template definiert und in der .cpp-datei Spezialisierung und fertig

14

16.10.2011, 17:40

Das liegt daran, das du die Spezialisierung ja auch in anderen .cpps verwenden willst, die den Header einbinden. Wenn eine .cpp übersetzt wird, kennt der Compiler aber nur den Inhalt dieser .cpp, und die eingebundenen Header. Wenn du jetzt in ner anderen .cpp ne Spezialisierung definierst, die aber in keinem eingebundenen Header deklariert wird, wird diese Spezialisierung folglich in der aktuellen Datei nicht berücksichtigt.

Werbeanzeige