Si vous êtes prêt à recourir à quelques astuces douteuses, vous pouvez faire preuve de créativité avec des chaînes de caractères brutes et des chaînes de caractères numériques. #include
pour certains types de fichiers.
Par exemple, disons que je veux inclure quelques scripts SQL pour SQLite dans mon projet et je veux obtenir la coloration syntaxique mais je ne veux pas d'infrastructure de construction spéciale. Je peux avoir ce fichier test.sql
qui est un SQL valide pour SQLite où --
commence un commentaire :
--x, R"(--
SELECT * from TestTable
WHERE field = 5
--)"
Et ensuite dans mon code C++ je peux avoir :
int main()
{
auto x = 0;
const char* mysql = (
#include "test.sql"
);
cout << mysql << endl;
}
La sortie est :
--
SELECT * from TestTable
WHERE field = 5
--
Ou pour inclure du code Python à partir d'un fichier test.py
qui est un script Python valide (car #
commence un commentaire en Python et pass
est un non-opérationnel) :
#define pass R"(
pass
def myfunc():
print("Some Python code")
myfunc()
#undef pass
#define pass )"
pass
Et ensuite dans le code C++ :
int main()
{
const char* mypython = (
#include "test.py"
);
cout << mypython << endl;
}
Ce qui donnera :
pass
def myfunc():
print("Some Python code")
myfunc()
#undef pass
#define pass
Il devrait être possible de jouer des tours similaires pour divers autres types de code que vous pourriez vouloir inclure dans une chaîne de caractères. Je ne sais pas si c'est une bonne idée ou non. C'est une sorte de piratage soigné, mais ce n'est probablement pas quelque chose que vous voudriez avoir dans un code de production réel. Cela pourrait être correct pour un projet de week-end.