我正在尝试#stringify__VA_ARGS__
可变参数宏中的每个标记。
这个想法是使用这些标记作为 an 中的条目enum
,并将它们(字符串化)推送到 a std::vector<std::string>
。假设enum
条目具有默认值,它们将映射为向量中的索引。
例子:
#include <vector>
#include <string>
#define MAKE_ENUM_AND_STRINGS(...)\
enum test_enum{ __VA_ARGS__ };\
std::vector<std::string> test_vector{ /*bad*/__VA_ARGS__/*bad*/ }
void foo() {
MAKE_ENUM_AND_STRINGS(a, b, c, d);
}
我已经读过很多关于它的文章,但找不到令人满意的解决方案(我不想定义 20 多个宏来“解析” __VA_ARGS__
)-我想知道 C++20 或 C++23 中的新内容是否会使得这可能吗?
编辑:我现在正在寻找使用的解决方案boost/preprocessor
。
根据参数数量重载宏。
我认为这是一种不寻常的字符串化枚举的方法。我认为通常使用X宏方法。考虑使用现有的 stringifing 枚举库,而不是重新发明轮子,其中有很多,例如如何在现代 C++ 中将枚举转换为字符串。