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

时间:2011-05-31 17:01:19

标签: c++ c macros

是否可以拥有一个宏:

CHAR_LIST(鸡)

扩展为:

'c','h','i','c','k','e','n'

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

2 个答案:

答案 0 :(得分:3)

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

------------

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

#include<iostream> // 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关于自动化计数过程的链接感到好奇。

答案 1 :(得分:2)

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