如何在VIsual C ++ 2010中实现C ++原始字符串文字?

时间:2012-12-23 03:12:58

标签: c++ visual-studio-2010 visual-studio visual-c++ c++11

您可能已经知道,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,不支持新功能,我必须自己实现。

1 个答案:

答案 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;
}