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

标签 c++ c macros

是否可以有一个宏:

CHAR_LIST(鸡肉)

扩展到:

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

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

最佳答案

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

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

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

#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 的自动化计数过程的链接。

关于C++宏将字符串转换为字符列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6190963/

相关文章:

c++ - 什么会使 C++ 预处理器宏成为公认的开发工具?

c++ - 双 bool 否定运算符

c# - VS2017 是否改变了 C++ 中访问 C# 命名空间的方式?

c - 为什么我在读取 txt 文件时会出现笑脸字符?

c++段错误(核心转储)与模数

c - 如何在函数中加载图片?

c - stdarg.h 功能似乎错误地连接参数

c++ - TRUE 和 FALSE 宏的奇怪定义

c++ - Pin工具中调用函数时出现段错误

c++ - 如何指定 QFileDialog::getExistingDirectory() 方法?