是否可以有一个宏:
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/