[英]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
可以移動到宏中。 不確定可以將其簡化到哪個范圍。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.