您可能已经知道,C ++ 11中的新字符串文字可以非常灵活的方式表达。
R"<delim>...<delim>";
- 在此代码中,<delim>
可以是几乎所有内容,也不需要转义字符。可以使用任何类型的括号来分隔字符串的结尾。在定义正则表达式时,原始字符串文字特别有用:
R"(I love those who yearn for the impossible. (Von Goethe, "Faust"))";
可以使用相同的相同字符来简单地定义文本块:
R";***************************(
; TINY BASIC FOR INTEL 8080
; VERSION 2.0
; BY LI-CHEN WANG
; MODIFIED AND TRANSLATED
; TO INTEL MNEMONICS
; BY ROGER RAUSKOLB
; 10 OCTOBER, 1976
; @COPYLEFT
; ALL WRONGS RESERVED )
;***************************";
可以找到更多信息here(维基百科)。
我想用C ++处理器实现它,这就是我所拥有的。现在不支持双引号,我需要像C ++ 11那样竞争它。任何人都可以帮助我吗?
#define STR(a) #a
#define R(var, re) static char var##_[] = STR(re);\
const char * var = ( var##_[ sizeof(var##_) - 2] = '\0', (var##_ + 1) );
你可以像这样使用它:
R(re, "\w\d");//It's OK, no warnings.
代码使用起来不方便。所以我想要像C ++ 11原始字符串文字这样的功能。
PS:我使用的是Visual C ++ 2010,不支持新功能,我必须自己实现。
答案 0 :(得分:2)
一点注意事项:您发布的示例不是C ++ 11标准中的原始字符串文字。标记必须不超过16个字符,结尾为');'与开始标记不匹配。不允许有空格。另一方面,这适用于visual studio 2012 + CTP(http://scrupulousabstractions.tumblr.com/post/36204698243/setupcpp11-msvs)
#include <string>
#include <iostream>
int main()
{
std::string x=R";************(; TINY BASIC FOR INTEL 8080
; VERSION 2.0
; 10 OCTOBER, 1976
; @COPYLEFT
; ALL WRONGS RESERVED );************";
std::cout << x <<std::endl;
return 0;
}