Um Daten in eine Datei zu schreiben oder sie über ein Netzwerk zu übertragen kann es nötig sein, sie aus ihrer natürlichen Repräsentation im Speicher in eine Bytesequenz zu packen. Glücklicherweise ist es nicht nötig, eine Funktion für jeden Typ gesondert zu schreiben, dank C++ Templates. Die folgenden Codeschnipsel illustrieren, wie man Daten in eine Zeichenkette packen und aus einer Zeichenkette auspacken kann ohne spezielle Funktionen dafür schreiben zu müssen.
Die einzige Anforderung, damit dies funktionieren kann, ist, dass die Länge der Daten mittels des sizeof() Operators ermittelt werden kann. Aber selbst wenn dies nicht möglich ist, ist es einfach, eine spezialisierte Überladung der Funktion zu erstellen, die das Funktions-Template benutzt um die eigentliche Arbeit zu erledigen. Unten finden Sie ein Beispiel, das Standard C++ Zeichenketten packt, so dass sie später aus der Bytesequenz wiederhergestellt werden können.
Das folgende Funktionstemplate packt Daten in eine Zeichenkette. Dies funktioniert für alle Datentypen, deren Größe mittels des sizeof() Operators ermittelt werden kann. Ein Parameter steht zur Verfügung, mit dem festgelegt werden kann, ob die Daten an den Zielpuffer angehängt werden sollen, oder ob sie dessen Inhalt einfach ersetzen sollen.
Der folgende Code kann verwendet werden, um Daten aus einer Zeichenkette auszupacken, die zuvor mittels pack() erstellt wurde. Ein Parameter steht zur Verfügung, mit dem ein Offset angegeben werden kann, an dem das Auspacken beginnen soll. Dies ist nützlich, wenn mehrere Datensätze
Dieser Quellcode verwendet das pack() Funktionstemplate um die Länge einer Zeichenkette und die Zeichenkette selbst in einen Puffer zu packen. Diese Daten können dann verwendet werden, um die Zeichenkette ohne zusätzliche Informationen wiederherzustellen. Es ist ein Beispiel dafür, wie man das oben definierte Funktionstemplate verwenden kann, um spezialisierte Packfunktionen für beliebige Datentypen zu implementieren.
Dies ist die Funktion um Zeichenketten aus einer Bytesequenz auszupacken. Es basiert auf dem unpack() Funktionstemplate, das weiter oben definiert wurde, um die Länge der Zeichenkette zu ermitteln, bevor die eigentlichen Daten aus dem Quellpuffer ausgepackt werden.