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
可以移动到宏中。不确定可以将其简化到什么程度。
我正在尝试生成以逗号分隔的给定类型的向量列表以实例化 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
可以移动到宏中。不确定可以将其简化到什么程度。