nochmal makros (o.ä.)
-
Ich versuche gerade wieder, eine möglichst (für mich) benutzerfreundliche header zu schreiben, um mit _einem_ schlüsselwort unterscheiden zu können, ob das Programm als unicode oder ascii version kompiliert wird...
Die header sieht bis jetzt (ungefähr, a. d. Kopf) so aus (kommt mit der Zeit bestimmt noch ne ganze Menge dazu...):#pragma once #ifdef UNICODE #define _UNICODE #endif #include <tchar.h> typedef TCHAR tchar; typedef std::basic_string<tchar> tstring;
Wenn ich jetzt einen generischen string will, sieht das so aus:
tstring s(_T("Foo"));
Lieber wäre mir, würde es so gehen:
tstring s("Foo");
Ich weiß net ob die idee doof is, aber könnte man nicht ein Textersetzungsmakro definieren, das "Foo" durch L"Foo" ersetzt? Wie müsste das ausschauen?
-
Nein, geht nicht.
Es wäre schöner, wenn es nen Unicode-Version-Konstruktor gäbe der nen Ascii-String akzeptiert und den dann nach Unicode umwandelt.
-
@ness:
Man könnte doch die basic_string klasse abeleiten oder eine Template-Spezialisierung vornehmen und dann einen entsprechenden Konstruktor definieren.Gruß Christian
-
Nagut, dann net...
Ich dachte nur, das geht ja:tstring a(L"VSJH");
Und das könnte man dann den Präprozessor machen lassen.
@christian123:
Ja, das geht natürlich, aber das halte ich für verschwendung. Denn dann müsste ich ja zur laufzeit den ascii string nach unicode umwandeln, obwohl schon beim compilieren feststeht, was es werden soll...
-
_T("foo") oder _("foo")
sind ja nun auch nicht so aufwendig zu schreiben...
-
ness schrieb:
Ich weiß net ob die idee doof is, aber könnte man nicht ein Textersetzungsmakro definieren, das "Foo" durch L"Foo" ersetzt?
Entweder ich hab dich falsch verstanden, aber _T bzw. TEXT sind doch Makros, die genau das machen.
SirLant schrieb:
Es wäre schöner, wenn es nen Unicode-Version-Konstruktor gäbe der nen Ascii-String akzeptiert und den dann nach Unicode umwandelt.
Wieso sowas zur Laufzeit machen, wenn das 'ne compile-time Angelegenheit ist? Was anderes ist es natürlich, wenn du kein Literal hast.
-
groovemaster schrieb:
SirLant schrieb:
Es wäre schöner, wenn es nen Unicode-Version-Konstruktor gäbe der nen Ascii-String akzeptiert und den dann nach Unicode umwandelt.
Wieso sowas zur Laufzeit machen, wenn das 'ne compile-time Angelegenheit ist? Was anderes ist es natürlich, wenn du kein Literal hast.
Das wäre die schöne Alternative, wenn man nicht immer ein _T("String") schreiben möchte.
Gibt aber vielleicht auch ne Möglichkeit mit Templatemetaprogrammierung, vllt. sagt Otze mal was dazu
-
SirLant schrieb:
Das wäre die schöne Alternative, wenn man nicht immer ein _T("String") schreiben möchte.
Nun, recht wär mir's auch, aber nicht auf Kosten der Laufzeit, auch wenn's in Initialisierungsphasen nicht so dramatisch ist.
Dann doch lieber über die ungeliebten Makros.
(Naja, immerhin hab ich bei meiner String-Klasse schon 'ne Möglichkeit für ein compile-time strlen für Literale gefunden..)
-
ich dachte string-literale und templates schließen sich gegenseitig aus?!