Wie kann ich das TEXT(...)-Makro von einem Templateparameter abhängig machen?
Unsere Antwort bzw. unser Lösungsvorschlag darauf war:
TEXT("...") oder _TEXT("...") sind beides Makros, die zu L"..." oder "..." expandieren. Damit ermöglichen sie, char oder wchar_t abhängig von den Kompileroptionen zu verwenden. Gibt es aber einen Template-Parameter
Ch, der char oder wchar_t sein kann, und man soll diesem etwas zuweisen, funktionieren die beiden Makros nicht. Man muss eine eigenes Makro schreiben:
namespace internal {
template<typename C>
struct char_chooser
{
static const char* choose_char(const char* c, const wchar_t* wc)
{
return c;
}
};
template<>
struct char_chooser<wchar_t>
{
static const wchar_t* choose_char(const char* c, const wchar_t* wc)
{
return wc;
}
};
}
#define _LIT(Ch, _Txt) (::internal::char_chooser<Ch>::choose_char(_Txt, L##_Txt))
template<typename Ch>
void say_to(std::basic_ostream<Ch>& _stream)
{
_stream << _LIT(Ch, "Hallo Welt!");
}
int main(int argc, char** argv)
{
say_to(std::cout);
say_to(std::wcout);
return 0;
}
Wir hoffen, vielen Besuchern der
MSDN Foren durch das Posten dieses Problems und einer möglichen Lösung weiterhelfen zu können.
Viele Grüße,
Entwickler-Hotline für MSDN Online Deutschland
Disclaimer:
Bitte haben Sie Verständnis dafür, dass wir hier auf Rückfragen gar nicht oder nur sehr zeitverzögert antworten können.
Bitte nutzen Sie für Rückfragen oder neue Fragen den telefonischen Weg über die MSDN-Entwickler-Hotline:
http://www.msdn-online.de/Hotline
Es gelten für die MSDN-Entwickler-Hotline und dieses Posting diese Nutzungsbedingungen
, Hinweise zu Markenzeichen,
Informationen zur Datensicherheit
sowie die gesonderten
Nutzungsbedingungen für die MSDN-Entwickler-Hotline .