Glocke hat geschrieben:Ach base_string ist generisch und ich kann mir (mit dem oben genannten typedef) nen "base string of UTF-16" erzeugen? versteh ich das so richtig?
Die Klasse base_string ist eine Template-Klasse, die du auf beliebige Typen anwenden kannst.
Siehe hier:
http://www.cplusplus.com/reference/string/string/
Das was du als std::string kennst, ist nichts weiter als die Anwendung des Templates auf den Typ char:
Das gleiche kannst du jetzt für Uint16 anstatt char machen. Oder du erstellst dir eine neue Klasse, die du von basic_string<Uint16> ableitest, dann kannst du ihr noch mehr Funktionalitäten geben.
Mit dieser Klasse kannst du dann sowas machen:
Code: Alles auswählen
void Network::send( UnicodeString& message, TCPsocket *socket )
{
SDLNet_TCP_Send( socket, message.c_str(), sizeof( Uint16 ) * message.size() );
}
UnicodeString Network::receive( TCPsocket *socket )
{
Uint16 buffer;
UnicodeString tmp;
do
{
SDLNet_TCP_Recv( socket, &buffer, sizeof( Uint16 ) );
tmp += buffer;
} while( buffer != SDLK_UNKNOWN );
return tmp;
}
Ist doch schon ganz hübsch, oder?
Mit c_str() bekommst du den reinen Array (Uint16 *). size() gibt dir die Anzahl an Elementen zurück, also brauchst du dich um das auch nicht kümmern. Außerdem kannst du weitere Zeichen einfach mit += dranhängen.
Beim rendern sieht das dann einfach so aus:
Code: Alles auswählen
SDL_Surface *surface = TTF_RenderUNICODE_Solid( arial16, message.c_str(), fc.white );
Alles klar?
