none
Aus der MSDN-Entwickler-Hotline: TEXT(...) / _TEXT(...) für Templates RRS feed

  • Allgemeine Diskussion

  • Hallo zusammen,
    heute wurde uns bei der MSDN-Entwickler-Hotline unter anderem folgende Frage gestellt:

    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
    MSDN-Entwickler-Hotline: Schnelle & kompetente Hilfe für Entwickler: kostenfrei!

    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 .


    • Bearbeitet Tobias Ka Dienstag, 30. September 2014 20:21
    Dienstag, 30. September 2014 20:19