c++ - C++ 中类似 Python 的动态参数解包?

标签 c++

我有一个 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/

相关文章:

c++ - 使用 getter 设置私有(private)变量

c++ - 访问者模式应该用于渲染吗?

c++ - 我在 myprogramminglab 中收到错误 "stoi is not a member of std"

c++ - 我可以避免超过 3 个级别的缩进吗?

c++ - Qt的替代品?

c++ - OpenCV 中的矩阵值为 inf/nan

c# - 检查由三个 3D 点形成的平面是否与立方体相交

c++ - 为什么我不能 static_cast 继承树下的模板化对象?

c++ - 递归的权力

c++ - 如何在 C++ 中为曲面创建邻接矩阵