Je viens de remarquer qu'une réponse que j'ai donnée pour cette question en fait, ça ne marche pas :
Que vous utilisiez CMake ou non, ce qui suit devrait fonctionner avec la norme actuelle :
std::string resource = R"( #include "text.txt" )";
Je pensais que le pré-processeur reconnaîtrait le format #include "text.txt"
en premier lieu et développer le texte.
Mais ce n'est manifestement pas le cas, le résultat pour
std::cout << resource << std::endl;
est
#include "text.txt"
J'ai essayé d'utiliser une macro pour que le #include
La déclaration peut être étendue à l'intérieur, mais cela ne fonctionne pas non plus :
#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;
}
Le résultat est
\ #include resource_name \
Existe-t-il une astuce permettant de faire entrer le text.txt
en une chaîne littérale brute c++-11, en utilisant le préprocesseur ou toute autre fonctionnalité habituelle du langage c++ ?
Avis de non-responsabilité :
Je sais très bien ce qui ne va pas avec les échantillons ci-dessus et pourquoi ils échouent de cette façon. Le problème, c'est que le préprocesseur ignore les éléments qui apparaissent à l'intérieur de "
paires.
Existe-t-il un moyen d'échapper à ces derniers pour qu'ils soient vus par le pré-processeur ?