Wie schöner machen?
-
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