Есть ли способ вставить текстовый ресурс в необработанный строковый литерал, используя препроцессор?
Я только что заметил, что ответ, который я дал дляэтот вопрос на самом деле не работает:
Независимо от использования CMake или нет, следующее должно работать с текущим стандартом:
std::string resource = R"(
#include "text.txt"
)";
Я думал, что препроцессор распознает#include "text.txt"
Заявление на первом месте и разверните текст.
Но это явно не тот случай, результат для
std::cout << resource << std::endl;
является
#include "text.txt"
Я пытался использовать макрос, чтобы#include
оператор может быть расширен внутри, но он также не работает:
#include <string>
#include <iostream>
#define RESOURCE_DEFINIION(resource_var,resource_name) \
const std::string resource_var = R"xxx( \
#include resource_name \
)xxx";
RESOURCE_DEFINIION(resource,"text.txt")
int main()
{
std::cout << resource << std::endl;
return 0;
}
Выход
\
#include resource_name \
Есть ли какие-то хитрости, доступные дляtext.txt
ресурс в литерале c ++ - 11 raw-string, используя препроцессор или любую другую обычную функцию языка c ++?
Отказ от ответственности:
Я хорошо знаю, что не так с вышеупомянутыми образцами и почему они терпят неудачу таким образом. Проблема в том, что препроцессор игнорирует то, что появляется внутри"
пар.
Так есть ли способ избежать их, чтобы их видел препроцессор?