Visual Studioで文字列を扱うとき、
以下の設定の違いで
TCHARの定義がかわる。
参考
Tchar.h における汎用テキストのマッピング
typedef std::basic_string<TCHAR> tstring; typedef std::basic_stringstream<TCHAR> tstringstream; typedef std::basic_ostringstream<TCHAR> tostringstream; typedef std::basic_istringstream<TCHAR> tistringstream;
どこかのサイトで見たが、こうしておけばどちらにでも対応できる。
(本当は最初から std::wstring で良かった)
Unicode文字セットのときの、
上の定義でのtstringはstd::wstringと同じであり、
std::stringとの相互変換方法を調べた。
見つかったサイト。
kryozahiro.hateblo.jp
このサイトではwcstombsという関数を使っているが、これはもう古くてでVisual Studio 2017ではエラーがでてしまうので
微修正した。
//std::wstring -> std::string void narrow(const std::wstring &src, std::string &dest) { char *mbs = new char[src.length() * MB_CUR_MAX + 1]; size_t i; wcstombs_s(&i, mbs, src.length() * MB_CUR_MAX + 1, src.c_str(), src.length() * MB_CUR_MAX + 1); dest = mbs; delete[] mbs; } //std::string -> std::wstring void widen(const std::string &src, std::wstring &dest) { wchar_t *wcs = new wchar_t[src.length() + 1]; size_t i; mbstowcs_s(&i, wcs, src.length() + 1, src.c_str(), src.length() + 1); dest = wcs; delete[] wcs; }
多分これで良いんじゃないかとおもう。