C ++宏将字符串转换为字符列表

是否有可能有一个宏:

CHAR_LIST(鸡)

扩展到:

‘鸡’

[原因我想要它:因为即使是中等大小的字符串,宏也比手动扩展更方便。 我需要扩展的原因是将字符串传递给varidiac模板]

应答者更新,2015年7月:由于上述关于问题本身的评论,我们可以看到真正的问题不是关于宏本身。 提问者想要解决的真正问题是能够将文字字符串传递给接受一系列字符作为非类型模板参数的模板。 这是一个解决该问题的ideone演示。 那里的实现需要C ++ 14,但很容易将其转换为C ++ 11。

————

我想我们需要一个更清晰的例子来说明如何使用这个宏。 我们需要一个可变参数模板的例子。 (另一个更新 :即使启用了c ++ 0x支持,这对我在变量模板中的g ++ 4.3.3上也不起作用,但我认为无论如何它可能都很有趣。)

#include // http://stackoverflow.com/questions/6190963/c-macro-to-convert-a-string-to-list-of-characters #include "stdio.h" using namespace std; #define TO_STRING(x) #x #define CHAR_LIST_7(x) TO_STRING(x)[0] \ , TO_STRING(x)[1] \ , TO_STRING(x)[2] \ , TO_STRING(x)[3] \ , TO_STRING(x)[4] \ , TO_STRING(x)[5] \ , TO_STRING(x)[6] \ int main() { cout << TO_STRING(chicken) << endl; printf("%c%c%c%c%c%c%c", CHAR_LIST_7(chicken)); } 

定义d的行是您感兴趣的内容。我已经包含了其他示例来说明它是如何构建的。 我很好奇@ GMan的自动计数过程的链接。

不,抱歉,不能这样做。 没有将字符串拆分为字符的操作。 你可以得到的最接近的是通过递归元编程,但这会给你数组作为一个对象,而不是实际的文本表示。