在Clang中使用MSVC预处理器'charizing'运算符

ben*_*wad 2 c++ clang visual-c++ c-preprocessor

我有以下代码,有人在MSVC上工作给我:

#define MAP1(x, y) map[#x] = #@y;
Run Code Online (Sandbox Code Playgroud)

我在Xcode上,使用Clang,从各种谷歌搜索中我发现这被称为"charizing运算符",并且特定于MSVC的预处理器.有没有办法在使用Clang时模拟此运算符的功能?我尝试删除@但收到以下错误消息:

Assigning to 'int' from incompatible type 'const char[2]'
Run Code Online (Sandbox Code Playgroud)

是否会对'int'进行明确的演绎或者是一个不同的操作员?

小智 5

字符串化运算符(标准C++)转换a"a",因此charizing运算符听起来就像它变成a'a'.您可以在简单的情况下,获得'a'"a"采取的第一个字符.

#define MAP1(x, y) map[#x] = static_cast<const char(&)[2]>(#y)[0];
Run Code Online (Sandbox Code Playgroud)

static_castconst char(&)[2]确保你得到一个编译时错误,如果你没有得到长度为1,这是两个字符,如果算上结尾的字符串'\0'.#y[0]无论字符串的长度如何,普通都会默默地接受第一个字符.