2012-01-22 3 views
9

バックスラッシュでエスケープすることなく文字列を引用する方法はありますか?たとえば、私は文字列にいくつかのラテックスコードを格納する方法をしたいと思います(\documentclass{article}など)。私はC++の長い文字列のPerlスタイルの引用符

string latex_code = "\\documentclass{article}" 

を行うことができますしかし、あなたは多くのことをエスケープする必要があるときに、LaTeXコードの多くを持っている場合には、例えば、迷惑取得します。 Perlでは、非常に便利な引用ツールがあることを覚えています。たとえば、ここの「q」および「qq」セクションを参照してください。 http://www.perlmonks.org/?node_id=401006

C++には何か類似点はありますか?私が考えることができる唯一の他のものは、外部ファイルにラテックスコードを貼り付けて読み込むことです。しかし、それはまた迷惑なようです。

答えて

12

C++ 11は、方法が:最初のケースで

R"(The String Data \ Stuff ")" 
R"delimiter(The String Data \ Stuff ")delimiter" 

"(と)" との間のすべてが文字列の一部です。 "と\文字はエスケープする必要はありません。後者の場合、区切り文字(区切り文字は開始時にのみ区切り文字になります)に達します。区切り文字には最大16文字の任意の文字列を指定できますが、この文字列に空白文字、制御文字、 '('、 ')'、または '\'文字を含めることはできませんこの区切り文字列を使用すると、生の文字列リテラル内に ")"文字を入れることができます。例えば、R "デリミタ((AZ))デリミタ" に相当する "(AZ)"

http://en.wikipedia.org/wiki/C%2B%2B11

これはC++ 03にはできません。

4

C++ 0Xは0123を有しています。それらのうちの1つは、生の文字列リテラルです。この文字リテラルは、文字列に異なる区切り文字を使用できるようにします。生の文字列はR文字で始まります。基本的な生の文字列リテラルはR"(Hello, World!)"です。ここでは"()"の間のすべてが文字列の一部です。

"(文字の間に文字列を入れることで、異なる区切り文字を指定することもできます。たとえば、生の文字列R"delimiter(Hello, World!)delimiter"は、区切り文字として"delimiter(を使用することを除いて、上記と同じ文字列です。 delimiterの部分は、最大16文字で、スペースを含めることはできません。()または/文字です。

これはC++ 0x機能なので、C++ 0x互換コンパイラが必要です。 gccはバージョン4.5以降でこの機能をサポートしており、clangはバージョン3.0以降になっているようです。