如何在 VIsual C++ 2010 中实现 C++ 原始字符串文字?
Posted
技术标签:
【中文标题】如何在 VIsual C++ 2010 中实现 C++ 原始字符串文字?【英文标题】:How to implement C++ raw string literals in VIsual C++ 2010? 【发布时间】: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:假设,如果这个可以纯粹作为一个预处理器来实现,为什么标准委员会会费心把它变成一个核心语言特性呢? :) 【参考方案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 是必需的。看看我的链接。以上是关于如何在 VIsual C++ 2010 中实现 C++ 原始字符串文字?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 GUI 中实现我的 while 循环以使用 Visual Studio 在 C/C++ 中保持按键
在 Visual Studio 6 中从 VB 调用 VS2010 C++ dll