Подтвердить что ты не робот

Эффективный С++ способ предоставления буквального значения специальным символам (") в строке С++

Я хочу сказать следующее:

<script src = "Script2.js" type = "text/javascript"> < / script>

в a std::string, поэтому я добавляю символ (\) перед каждым двойным кавычком ("), чтобы дать ему буквальное значение ", вместо демаркации строки в С++, как это:

std::string jsFilesImport = "<script src = \"Script2.js\" type = \"text/javascript\"> < / script>\""

Если у меня есть большой string со многими ("), добавление (\) для каждого (") становится затруднительным. Есть ли простой способ достичь этого на С++?

4b9b3361

Ответ 1

Самый простой способ - использовать строковый литерал строки:

std::string s = R"x(<script src = "Script2.js" type = "text/javascript"> < / script>)x";
             // ^^^^                                                                ^^^

Вам просто нужно позаботиться о том, чтобы разделители x( )x не использовались в тексте, представленном внутри. Все остальные символы, появляющиеся в этих разделителях, отображаются как есть (включая новые строки). x выбирается произвольно, может быть something(, )something.


Чтобы избежать дополнительных вопросов по этому поводу:

Нет, невозможно сделать 1 что-то вроде

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

Препроцессор не распознает оператор #include "MyRawTextResource.txt", поскольку он заключен в пару двойных кавычек (").

В этом случае подумайте о том, чтобы ввести свой пользовательский шаг предварительной сборки, выполняющий замену текста перед компиляцией.


1) По крайней мере, мне не удалось найти обходной путь. Цените, если кто-то докажет мне, что не так.