簡體   English   中英

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可以移動到宏中。 不確定可以將其簡化到哪個范圍。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM