¿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 \
¿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?