Есть ли способ вставить текстовый ресурс в необработанный строковый литерал, используя препроцессор?

Я только что заметил, что ответ, который я дал дляэтот вопрос на самом деле не работает:

Независимо от использования 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 ++?

Отказ от ответственности:

Я хорошо знаю, что не так с вышеупомянутыми образцами и почему они терпят неудачу таким образом. Проблема в том, что препроцессор игнорирует то, что появляется внутри" пар.

Так есть ли способ избежать их, чтобы их видел препроцессор?

Ответы на вопрос(1)

Ваш ответ на вопрос