[問題] VC++ CString 和 std::string 相容的方法

看板C_and_CPP作者 (26)時間11年前 (2013/08/07 21:07), 編輯推噓7(7033)
留言40則, 11人參與, 最新討論串1/1
開發平台(Platform):VC++ 2012 問題(Question): 1.VC++中的CString類別中,須宣告的<afx.h>敘述是要怎麼設定,好像沒辦法直接宣告? 2.宣告成CString之後,是不是沒辦法和一般的string類別作一樣的處理,如:find 請問有什麼好方法可以讓CString也可以正常的用string類別的成員函式? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.227.242.93 ※ 編輯: JackYiyo 來自: 61.227.242.93 (08/07 21:08) ※ 編輯: JackYiyo 來自: 61.227.242.93 (08/07 21:09)

08/07 22:09, , 1F
先問用CString有什麼好處? 要用要有mfc...
08/07 22:09, 1F

08/07 22:15, , 2F
為什麼要用CString這麼老舊的東西? 有非用不可的理由嗎
08/07 22:15, 2F

08/08 00:55, , 3F
我不清楚CString的性質和缺點,不過通常用過時的function是
08/08 00:55, 3F

08/08 00:56, , 4F
因為懂得不夠多,受限於前人or網路or書中的範例
08/08 00:56, 4F

08/08 01:05, , 5F
CString不需要MFC,它也是template class
08/08 01:05, 5F

08/08 01:05, , 6F
呼叫Win32 API用CString最方便
08/08 01:05, 6F

08/08 01:08, , 7F
08/08 01:08, 7F

08/08 01:51, , 8F
蛤?我以為 Win32 API 都是用 LPCSTR (ie. char*) 的說...
08/08 01:51, 8F

08/08 01:52, , 9F
唔, 好像弄錯了: LPSTR 才是 char* LPCSTR 是 const char*
08/08 01:52, 9F

08/08 01:52, , 10F
總之我是指傳統 C 字串
08/08 01:52, 10F

08/08 01:58, , 11F
再說寫 C++ 的話我們還有標準的 std::string 可以用
08/08 01:58, 11F

08/08 01:58, , 12F
為什麼要去弄一個只有 MFC 才會看得到的 CString @@
08/08 01:58, 12F

08/08 01:58, , 13F
CStringT有cast operator所以可以直接放進去
08/08 01:58, 13F

08/08 01:59, , 14F
CStringT現在也是直接定義在header裡的template class
08/08 01:59, 14F

08/08 02:00, , 15F
大家似乎都停留在VC6時代啊
08/08 02:00, 15F

08/08 09:40, , 16F
不要MFC也要ATL阿XDDD
08/08 09:40, 16F

08/08 09:40, , 17F
可能是Win API需要用到CString吧
08/08 09:40, 17F

08/08 09:41, , 18F
嗯...雖然我也會用 CString, 但想不到哪個 WinAPI 有用到
08/08 09:41, 18F

08/08 10:49, , 19F
應該是說LPTSTR
08/08 10:49, 19F

08/08 12:03, , 20F
LPTSTR跟CString毫無關係阿 就是TCHAR*而已
08/08 12:03, 20F

08/08 12:04, , 21F
他使用W版本API就是LPWSTR 使用A版本API就是LPSTR
08/08 12:04, 21F

08/08 20:46, , 22F
我倒是覺得 .c_str() 語意明確 代表這裡就是個傳統 C 字串
08/08 20:46, 22F

08/08 20:48, , 23F
至於 cast operator 什麼的我是不會去理它就是了...
08/08 20:48, 23F

08/09 02:22, , 24F
用到ATL header但不需要ATL library,這和自己寫一樣
08/09 02:22, 24F

08/09 02:24, , 25F
CStringT把LoadString包好了,光這點就方便太多
08/09 02:24, 25F

08/09 02:28, , 26F
而且對字串操作的支援也比較豐富
08/09 02:28, 26F

08/09 02:30, , 27F
COM-based的API都是用BSTR,CString一樣便利
08/09 02:30, 27F

08/09 02:31, , 28F
多年以前我當學生也總是質疑為什麼不用Standard Library
08/09 02:31, 28F

08/09 02:32, , 29F
當你需要每天寫一萬行Windows應用程式就知道工具很重要
08/09 02:32, 29F

08/09 09:43, , 30F
--Windows應用程式不是都拿CreateWindowEx硬幹嗎--
08/09 09:43, 30F

08/09 09:43, , 31F
^--刪除線 XD
08/09 09:43, 31F

08/09 09:43, , 32F
如果已經是用MFC/ATL/WTL寫win32 自然會有CString 那我
08/09 09:43, 32F

08/09 09:44, , 33F
同意f大 用了很方便~
08/09 09:44, 33F

08/09 10:15, , 34F
(拿CreateWindowEX硬幹,但不是很想用微軟的庫就是了)
08/09 10:15, 34F

08/09 11:01, , 35F
不同的Framework都常常封裝String, ATL/MFC 常使用CString
08/09 11:01, 35F

08/09 11:03, , 36F
QT 使用 QString, wxWidgets 使用 wxString, WebKit 使用
08/09 11:03, 36F

08/09 11:05, , 37F
WTFString, 方便使用就好.
08/09 11:05, 37F

08/09 11:07, , 38F
std::string 沒甚麼不好, 只是在該架構上大多數是用甚麼,
08/09 11:07, 38F

08/09 11:09, , 39F
就用甚麼比較好, 不然有時會破壞該架構的封裝方式...
08/09 11:09, 39F

08/09 13:47, , 40F
std::string 不能直接用 Unicode 字元就很什麼不好了...
08/09 13:47, 40F
文章代碼(AID): #1I0aQJW5 (C_and_CPP)