我正在编写在Linux和Windows上都可以使用的代码(如果这意味着引入一些ifdef宏,那很好)。用于wifstream的linux getline似乎只接受wchar_t,并且由于wchar_t是编译器特定的实现,当我尝试读取单词poké
时,我没有得到想要的结果。
这是我的实现的摘要:
std::wifstream GetFp()
{
auto fp = std::wifstream (path, std::wifstream::binary);
const std::locale utf8_locale
= std::locale(std::locale(), new std::codecvt_utf8<WCHAR>());
fp.imbue(utf8_locale);
}
稍后,我将其设为以下唯一指针:
auto ifs = std::make_unique<std::wifstream>(GetFp());
在readfile函数下,有一个for循环,该循环从文件逐行获取。称为getline(ifs.get()
的读取行函数实现如下:
bool getline(std::wistream* ifs)
{
#ifndef XPLATFORM
TChar buf[8192];
#else
wchar_t buf[8192];
#endif
ifs->getline(buf, _countof(buf));
if (ifs->eof())
return false;
return true;
}
如果我为Linux实现尝试了除wchar_t之外的任何其他数据类型,它总是给我带来编译问题。任何解决此问题的建议将非常有帮助。