gpt4 book ai didi

c++ - istreambuf_iterator 的用法

转载 作者:搜寻专家 更新时间:2023-10-31 01:40:22 25 4
gpt4 key购买 nike

我有一段代码可以将 .txt 文件的内容读入字符串。

std::ifstream file("address.txt");  
std::string oldAddress((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>());

如果我改用 std::wstring 自然它也可以工作,就像这样:

std::wifstream file("address.txt"); 
std::string oldAddress((std::istreambuf_iterator<wchar_t>(file)), std::istreambuf_iterator<wchar_t>());

这是我的问题:假设我不知道字符集是 Unicode 还是多字节,我希望我的代码足够通用以处理这两个选项。为了获取基于 TCHAR 的字符串概念,使用 istreambuf_iterator 的最佳方式是什么?

这是我的尝试,有效,但我想知道是否真的有必要创建这些 typedef。

typedef std::basic_ifstream<TCHAR> tifstream;
typedef std::basic_string<TCHAR, std::char_traits<TCHAR>, std::allocator<TCHAR>> tstring;

tifstream file("address.txt");
tstring oldAddress((std::istreambuf_iterator<TCHAR>(file)), std::istreambuf_iterator<TCHAR>());

提前致谢!

最佳答案

如果你想处理你的库不支持的新字符类型(在本例中是 MSVCRT),除了与你的字符类型相关的常规 typedef 之外,你还应该提供一个字符特征。

字符类型的 char_traits 很重要,如果没有比较、长度和其他静态专门用于字符的例程将无法工作,您将面临不良行为。

确保您专门针对 TCHAR 的 char_traits 模板

template<>
struct char_traits<TCHAR>
{

关于c++ - istreambuf_iterator<TCHAR> 的用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29879344/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com