Wie schöner machen?



  • ?????? schrieb:

    std::basic_string<TCHAR> und TEXT makro nutzen?

    ich brauche beide in einem Projekt



  • boosty schrieb:

    ?????? schrieb:

    std::basic_string<TCHAR> und TEXT makro nutzen?

    ich brauche beide in einem Projekt

    hä??



  • template<class T>
    T A(const T& s) 
    { 
        return s.find('.')==T::npos ? to_lower_copy(s)+"3" : to_lower_copy(s); 
    }
    

    P.S.: Hab mit Templates noch nich viel gemacht.. aber dene das heir ist ein Funktionstemplate.. vll. Funktionierst es ja schon so..



  • das ist gemeint mit dem tchar und makro

    std::basic_string<TCHAR> tstring
    tstring A(const tstring& s) 
    { 
        return s.find('.')==T::npos ? to_lower_copy(s)+_T("3") : to_lower_copy(s); 
    }
    


  • @Boris: Das Template klingt schonmal nicht schlecht, aber ich würde den Zeichentyp als Template-Parameter verwenden:

    template<typename CT>
    basic_string<CT> A(const basic_string<CT>& s)
    {...}
    

    (Außerdem müsstest du die verwendeten Literale '.' und "3" noch passend anpassen (oder als Parameter mitgeben) - mit der Angabe _T('.') kann zumindest eine Version des Templates nicht viel anfangen)

    @Mr Evil: Daß deine Version nicht passt, hat boosty doch schon klargestellt.



  • BorisDieKlinge schrieb:

    template<class T>
    T A(const T& s) 
    { 
        return s.find('.')==T::npos ? to_lower_copy(s)+"3" : to_lower_copy(s); 
    }
    

    ganz so einfach gehts leider nicht...

    template<class T>
    T A(const T& s) 
    { 
        typedef T::value_type Char;
        std::ctype<Char>& facet=std::use_facet<std::ctype<Char> >(std::locale())
    
        Char dot=facet.widden(".");
        Char three=facet.widden("3");
    
        return s.find(dot)==T::npos ? to_lower_copy(s)+three : to_lower_copy(s); 
    }
    

    ungetestet, aber so müsste es stimmen.

    //edit bissl formatiert, bissl verschönert...



  • die funktion heißt widen und übernimmt einen char und kein string-literal (wenn man sie so verwendet) 😉



  • queer_boy schrieb:

    die funktion heißt widen und übernimmt einen char und kein string-literal (wenn man sie so verwendet) 😉

    wie gesagt, nicht getestet. löscht man ein d und nutzt '.' statt ".". is ja auch nicht die welt, aber zumindest portabel 😉



  • otze schrieb:

    aber zumindest portabel 😉

    Prinzipiell ja, aber AFAIR kennt der VC++-Compiler 'use_facet' nicht sondern muss stattdessen das Makro '_USE' bemühen. Kann's leider gerade nicht testen, sitze ohne VC++ hier.



  • Konrad Rudolph schrieb:

    otze schrieb:

    aber zumindest portabel 😉

    Prinzipiell ja, aber AFAIR kennt der VC++-Compiler 'use_facet' nicht sondern muss stattdessen das Makro '_USE' bemühen. Kann's leider gerade nicht testen, sitze ohne VC++ hier.

    auf nicht standardkonforme compiler muss man keine rücksicht nehmen :p



  • otze schrieb:

    template<class T>
    T A(const T& s) 
    { 
        typedef T::value_type Char;
        std::ctype<Char>& facet=std::use_facet<std::ctype<Char> >(std::locale())
    
        Char dot=facet.widden(".");
        Char three=facet.widden("3");
    
        return s.find(dot)==T::npos ? to_lower_copy(s)+three : to_lower_copy(s); 
    }
    

    Wo lernt man sowas 🙂 ? Das ist so ein Bereich in dem ich mich überhaupt nicht auskenne. Hast du vllt einen Link oder eine andere Referenz, wo die ganzen Sachen über facet's etc stehen ?



  • @KasF:
    Locales in C++ waren für mich bis vor kurzem auch noch Neuland - und einfach verständliche Infos dazu gibt es im Netz wenig (zumindest weniger als zu allen anderen Themen rund um C++). Aber im Struppi gibt es ein Kapitel im Anhang zu dem Thema, und danach helfen die Referenzen (z.B. von Dinkum) einem imho recht gut.



  • LordJaxom schrieb:

    @KasF:
    Locales in C++ waren für mich bis vor kurzem auch noch Neuland - und einfach verständliche Infos dazu gibt es im Netz wenig (zumindest weniger als zu allen anderen Themen rund um C++). Aber im Struppi gibt es ein Kapitel im Anhang zu dem Thema, und danach helfen die Referenzen (z.B. von Dinkum) einem imho recht gut.

    Hmm, im Josuttis' "C++ Standard Library: A Tutorial and Reference" scheint im Kapitel 14 ne ganze Menge dazu zu sein: http://www.aw-bc.com/catalog/academic/product/0,1144,0201379260-TOC,00.html .
    Bei Gelegenheit werde ich mir es mal kaufen, wollte es schon immer haben 🙂

    LordJaxom schrieb:

    (zumindest weniger als zu allen anderen Themen rund um C++)

    Wie kommt das ? Interssiert das niemanden ...



  • KasF schrieb:

    LordJaxom schrieb:

    @KasF:
    Locales in C++ waren für mich bis vor kurzem auch noch Neuland - und einfach verständliche Infos dazu gibt es im Netz wenig (zumindest weniger als zu allen anderen Themen rund um C++). Aber im Struppi gibt es ein Kapitel im Anhang zu dem Thema, und danach helfen die Referenzen (z.B. von Dinkum) einem imho recht gut.

    Hmm, im Josuttis' "C++ Standard Library: A Tutorial and Reference" scheint im Kapitel 14 ne ganze Menge dazu zu sein

    Ja, da steht einiges zum Thema Locales drin - aber im Verhältnis zu anderen Teilen der Standard-Bibliothek wird dieser Bereich eher knapp abgehandelt.

    LordJaxom schrieb:

    (zumindest weniger als zu allen anderen Themen rund um C++)

    Wie kommt das ? Interssiert das niemanden ...

    Vermutlich weil die ganze Geschichte rund um die Internationalisierung recht komplex ist.



  • Wenn man mehr darüber wissen will lohnt sich evtl. auch das hier
    Standard C++ IOStreams and Locales | ISBN: 0201183951


Anmelden zum Antworten