¿Hay alguna manera de extraer un recurso de texto en un literal de cadena sin procesar utilizando el preprocesador?

Acabo de notar que una respuesta que he dado paraesta pregunta en realidad no funciona:

Independientemente de usar CMake o no, lo siguiente debería funcionar con el estándar actual:

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

Pensé que el preprocesador reconocería el#include "text.txt" declaración en primer lugar y ampliar el texto.

Pero obviamente ese no es el caso, el resultado de

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

es

#include "text.txt"

Traté de usar alguna macro para dejar que el#include la declaración se expande dentro, pero tampoco 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;
}

La salida es

\                                                                                                                                                                                          
    #include resource_name \                                                                                                                                                                

Aquí está la demo para jugar

¿Hay algún truco disponible para tirartext.txt recurso en un literal de cadena sin procesar de c ++ - 11, utilizando el preprocesador o cualquier otra característica normal del lenguaje c ++?

Descargo de responsabilidad:

Sé muy bien qué está mal con las muestras anteriores y por qué fallan de esta manera. Es un problema que el preprocesador ignore las cosas que aparecen dentro" pares.

Entonces, ¿hay alguna forma de escapar de estos para ser visto por el preprocesador?

Respuestas a la pregunta(1)

Su respuesta a la pregunta