C++ 预处理器:迭代以逗号分隔的列表参数

C++ Preprocessor: Iterate over comma-separated list argument

我正在尝试生成以逗号分隔的给定类型的向量列表以实例化 std::variant 个向量。 (我不想写一大堆单行代码,所以我决定使用宏。我愿意接受针对这个根本问题的新建议)。

是否可以编写定义预处理器变量的宏,该变量看起来是给定类型的逗号分隔向量列表:

#define INTEGRAL_TYPES char, int, long long, size_t
#define MAGIC_MACRO(x) ???

#define SEQUENTIAL_TYPES MAGIC_MACRO(INTEGRAL_TYPES) // this will generate std::vector<char>, std::vector<int>, std::vector<long long>, std::vector<size_t>

这可以用 C++ 模板来完成:

#include <variant>
#include <vector>

template<typename... Types>
using VariantVectorGenerator = std::variant<std::vector<Types>...>;

using MyWeirdVariantVectorThing = VariantVectorGenerator<int, double, float>;

int main() {
    MyWeirdVariantVectorThing x;
    x = std::vector{42};
    x = std::vector{13.2};
}

在这种情况下 int, double, float 可以移动到宏中。不确定可以将其简化到什么程度。