2010-04-26 23 views
8

Windows varsayılan olarak UTF8 desteği olan bir C++ yerelliğine sahip olmadığından, UTF8'i destekleyen özel bir yerel nesne nesnesi oluşturmak istiyorum (bunu özel bir ctype yönü ile oluşturarak).Kendi özel yerel ayarınızı oluşturmak mümkün mü

i kendi Ctype uygulanması bir yerel nesne oluşturmak

C++ yerel yapımını desteklemiyorsa (ben sadece temel olarak mevcut bir yerel kullanılarak bir yerel inşa etmek .. fonksiyonları bulundu) nasıl özel bir ctype faset ile, neden bu kadar?

+1

ctype utf-8 gibi değişken uzunluk kodlamaları ile uyumlu değildir. Örneğin, tolower() tek bir CharType alır ve döndürür. ASCII alt kümesinin dışındaki herhangi bir karakter, ctype ile çevrilemez. –

+2

Bkz. Http://www.boost.org/doc/libs/1_42_0/libs/serialization/doc/codecvt.html. Ayrıca Stroustrup Ek D, http://www.research.att.com/~bs/3rd_loc.pdf. Ve Standart C++ IOStreams ve yerel http://books.google.fr/books?id=nnRog4I-3jwC – anno

+0

@anno: teşekkürler bu bağlantılar bana çok yardımcı oldu, +1 – smerlin

cevap

5

Std :: locale :: facet'ten miras alarak özel ayarlar oluşturabilirsiniz. Yerel ayarlar aşağıdaki kodda olduğu gibi kullanabilir:

class custom_facet : public std::locale::facet { 
public: 
    static std::locale::id id; 
    custom_facet(int); 
    int custom_value() const; 
    }; 

std::locale custom_locale (std::locale(), new custom_facet()); 
int s = std::use_facet<custom_facet>(custom_locale).custom_value(); 
+0

cevabı, bu soruya sadece kısmen cevap vermiş olmasına rağmen cevap olarak kabul edildi, ancak annos bağlantıları bana yardımcı oldu, bu yüzden bu soru benim için çözüldü. – smerlin

İlgili konular