如何cout std :: basic_string <tchar> </tchar>

时间:2011-03-02 08:41:20

标签: c++ string visual-c++ stl

我想尝试basic_string<TCHAR>。但是cout正在抛出错误。我可以知道怎么做吗

3 个答案:

答案 0 :(得分:21)

正如dauphic所说,std::wcout用于宽字符串,std::cout用于窄字符串。如果你想能够为任何一种类型的字符串进行编译(TCHAR意味着使这类事情变得更容易),这样的事情有时会让生活更轻松:

#if defined(UNICODE) || defined(_UNICODE)
#define tcout std::wcout
#else
#define tcout std::cout
#endif

使用tcout代替。

答案 1 :(得分:6)

TCHAR是应用程序使用的字符类型的winapi定义。如果将字符集设置为多字节字符,则它将为char。如果将其设置为Unicode,则为wchar_t

如果是wchar_t,则需要使用std::wcout。否则,只需简单std::cout即可。

通常情况下,您还可以解释您遇到的错误,但很有可能您尝试将std::basic_string<wchar_t>插入std::cout,而且可能没有operator<<超载。

答案 2 :(得分:3)

正如@Bo Persson所提到的,另一种定义tcout类型的方法是使用引用正确的流类型。虽然在执行此操作时还有一些事情要考虑,因为由于多个或缺少定义,您很容易就会遇到链接器问题。

对我来说有用的是在标题中将这些类型声明为外部引用,并在源文件中将它们定义为一次。这也适用于预编译的头文件(stdafx)。

标题

namespace std
{
#ifdef UNICODE
    extern wostream& tcout;
#else
    extern ostream& tcout;
#endif // UNICODE
}

<强>实施

namespace std
{
#ifdef UNICODE
    wostream& tcout = wcout;
#else
    ostream& tcout = cout;
#endif // UNICODE
}