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