Existe uma maneira de extrair um recurso de texto em uma literal de seqüência de caracteres bruta usando o pré-processador?

Acabei de perceber que uma resposta que eu deiessa questão na verdade não funciona:

Independentemente de usar o CMake ou não, o seguinte deve funcionar com o padrão atual:

std::string resource = R"(
#include "text.txt"
)";

Eu pensei que o pré-processador reconheceria o#include "text.txt" declaração em primeiro lugar e expanda o texto.

Mas obviamente não é esse o caso, o resultado para

std::cout << resource << std::endl;

é

#include "text.txt"

Eu tentei usar alguma macro para deixar o#include A declaração deve ser expandida, mas também não funciona:

#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;
}

A saída é

\                                                                                                                                                                                          
    #include resource_name \                                                                                                                                                                

Aqui está a demo para jogar

Existe algum truque disponível para puxar otext.txt recurso em um literal de cadeia bruta c ++ - 11, usando o pré-processador ou qualquer outro recurso regular da linguagem c ++?

Aviso Legal:

Sei bem o que há de errado com as amostras acima e por que elas falham dessa maneira. É um problema que o pré-processador ignore as coisas que aparecem dentro" pares.

Então, existe uma maneira de escapar deles para ser visto pelo pré-processador?

questionAnswers(1)

yourAnswerToTheQuestion