Использовать содержимое файла как жестко закодированную строку

Я ищу простой способ использовать содержимое файла в качестве жестко закодированной строковой константы.

Конечно, я мог бы просто скопировать / вставить содержимое файла в define но это потребовало бы от меня \s в конце каждой строки и перед каждым ",

Я пытался использовать constexpr чтобы прекомпилятор загрузил файл, но либо я сделал что-то не так (я не знаком с constexpr) или это невозможно.

Вот что я попробовал:

constexpr const char* loadFile()
{
std::string retVar;

std::ifstream file("filename.txt");
retVar = std::string((std::istreambuf_iterator<char>(file)),
std::istreambuf_iterator<char>());

return retVar.c_str();

}

#define FILE_CONTENT = loadFile();

Я получаю ошибку:

error: body of constexpr function 'constexpr const char* loadFile()' not a return-statement

Может быть, кто-то может изменить мой код, чтобы он работал так, как ожидалось, или, может быть, у кого-то есть совершенно новый способ достижения моей цели.

Я знаю, что мог бы просто написать скрипт, который читает содержимое файла и преобразует его в #define но я хотел бы сделать это без дополнительных шагов перед сборкой.

Редактировать:
Как встроить файл в исполняемый файл? фокусируется на встраивании бинарных файлов. Я просто хочу использовать содержимое текстового файла в качестве жестко закодированной строки.
Предложенные методы слишком тяжелы для того, что я хочу сделать.

1

Решение

Самый простой способ — скопировать и вставить содержимое в файл заголовка / реализации, но как сырье строковый литерал, т.е.

constexpr const char *fileContent = R"~(FILE_CONTENT_GOES_HERE)~";
//               begin raw literal: ^^^^                      ^^^ end raw literal

где вы должны заменить FILE_CONTENT_GOES_HERE с неизмененный содержание файла. Обратите внимание, что разделитель (здесь: ~) можно выбрать по-другому, смотрите Вот для деталей.

Необработанные строковые литералы — это функция C ++ 11, которая освобождает вас от необходимости избегать чего-либо (кавычки, переводы строки и т. Д.). Обратите внимание, что в C ++ 17 может потребоваться привязать строковый литерал к std::string_view экземпляр и / или объявить переменную как inline,

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]