2012-01-17 38 views
1

比如,我剛剛發現自己編寫以下特質:類:C++:是否有一個包含各種函數的traits類來操作零終止的char *和wchar_t *字符串?

template<class TCHAR> struct sz; 
template<> struct sz<char> 
{ 
    static void copy(char *dst, int bufSize, const char *src) 
    { 
    strcpy_s(dst, bufSize, src); 
    } 
}; 
template<> struct sz<wchar_t> 
{ 
    static void copy(wchar_t *dst, int bufSize, const wchar_t *src) 
    { 
    wcscpy_s(dst, bufSize, src); 
    } 
}; 

我想知道一個人是否真的有寫這樣的東西還是有已經寫了什麼,讓我們處理字符串,而無需關心wchar_tchar

畢竟,我們有:

  • cout VS wcout
  • cerr VS wcerr
  • string VS wstring
  • boost::format VS boost::wformat
  • 等...
+1

是的,真正的答案:使用'char_traits',雖然他們有一個不同於你的界面。我的觀點:[禁用'wchar_t'並僅使用窄字符](http://programmers.stackexchange.com/questions/102205/should-utf-16-be-considered-harmful)。 – ybungalobill 2012-01-17 20:30:47

回答

2

檢查std::char_traits<Ch>。特別是,strcpy(dst, src, n)可以重寫爲std::char_traits<Ch>::copy(dst, src, n)

它沒有你所要求的所有東西。只有標準的C字符串功能可用。

對於string vs wstring,你可以使用std::basic_string<Ch>,這就是這兩個typedef的實際內容。同樣,我們有boost::basic_format<Ch>

相關問題