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

Hep*_*tic 7 c c++ macros

是否可以有一个宏:

CHAR_LIST(鸡肉)

扩展到:

'鸡'

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

Aar*_*aid 5

回答者更新,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));
}
Run Code Online (Sandbox Code Playgroud)

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

  • 非常有趣,如果这可以扩展为自动计算字符串长度,它似乎是解决方案:) /me 去试试 (2认同)