Я пишу код, который будет работать как на Linux, так и на Windows (и если это означает введение нескольких макросов ifdef, это нормально).Линия getline для wifstream, кажется, принимает только 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;
}
Если я попробую любой другой тип данных, кроме wchar_t, для реализации linux, он будет вызывать проблемы с компиляцией.Любые предложения, чтобы исправить это, будут действительно полезны.