我有一个 std::map<int, std::vector<MyClass>>
和一个接受动态数量的迭代器的函数,特别是 iter::zip_longest
.
我想将 map 中的 vector 传递给 zip_longest
,但鉴于 map 中有动态数量的 vector ,我没有看到实现此目的的直接方法。我知道使用模板和 sizeof
编译时间常量是可行的,但是我无法在编译时指定它。
我本质上想做的是
std::vector<std::vector<MyClass>*> all_vectors;
for (const auto it : my_map) {
all_vectors.push_back(&it.second);
}
for (const auto it : iter::zip_longest(*all_vectors)) { // <-- Here using *all_vectors to unpack like in Python.
// Do stuff here
}
我还要说,我知道这可以通过 zip_longest
以外的其他方式实现。 ,我只是想知道是否有一种干净的方法让我使用这个现有的功能。
最佳答案
C++ 是一种静态类型语言。 zip_longest
是一个根据获取的参数数量生成 zip 迭代器的函数。但是函数获取的参数数量在 C++ 中是一个静态数量。如果你需要给一个函数一个运行时值的数量,那么你必须提供一个运行时范围或容器或类似的东西。 zip_longest
并不是为此而构建的。
关于c++ - C++ 中类似 Python 的动态参数解包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56026842/