【问题标题】:How to implement C++ raw string literals in VIsual C++ 2010?如何在 VIsual C++ 2010 中实现 C++ 原始字符串文字?
【发布时间】:2012-12-23 03:12:58
【问题描述】:

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

【问题讨论】:

  • 我非常怀疑如果没有某种内置语言支持,您能否做得更好。
  • 为什么不呢?你有什么建议?
  • @Triumphant:假设,如果这个可以纯粹作为一个预处理器来实现,为什么标准委员会会费心把它变成一个核心语言特性呢? :)

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


【解决方案1】:

附带说明:您发布的示例不是 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;
}

【讨论】:

  • 在 Visual Studio 2012 中无法为我编译
  • CTP 是必需的。看看我的链接。
猜你喜欢
  • 2011-03-08
  • 1970-01-01
  • 2018-09-26
  • 1970-01-01
  • 2013-05-23
  • 1970-01-01
  • 1970-01-01
  • 2021-02-25
  • 1970-01-01
相关资源
最近更新 更多