3

您可能已经知道,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 ) ;***************************";

更多信息可以在这里找到(维基百科)。

我想用 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,不支持新特性,必须自己实现。

4

1 回答 1

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;
}
于 2012-12-23T08:37:18.893 回答