c++ - 为什么不为 std::tuple 重载 STL 算法?

标签 c++ tuples std-pair stl-algorithm stdtuple

我想知道为什么某些 STL 算法没有重载以使其可用于元组。一些,我的意思是那些不重新排序元素的。一个很好的例子可能是 std::for_each .

是否存在语言限制,例如可能无法混合编译时评估和运行时评估?让我澄清最后一句话:

我知道迭代本身需要成为编译时迭代,然后必须定义编译时迭代器才能使用编译时 std::get<>获取值。之后,应该可以将模板化的 lambda 应用于元组中的每个异构类型,但该类型的值随后会在运行时求值。

我认为这应该是可能的,即使我个人不知道从哪里开始。我看到的实现看起来不像 std::for_each完全可以达到相同的结果。为什么会这样?

(注意:“元组”是指 std::pairstd::tuple )

最佳答案

STL算法使用迭代器,与std::tuple不兼容。

std::tuple 带有自己的一组函数,因此您的 for_each 可以使用 std::apply 完成:

std::apply([](const auto&... args)
          {
              ((std::cout << args << std::endl), ...); // C++17 Fold expression
          }, t);

关于c++ - 为什么不为 std::tuple 重载 STL 算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50483496/

相关文章:

c++ - 在 lambda 捕获中创建一个数组

android - 在 Android Studio 中使用预构建的共享库

python - 使用 Python 测试元组是否仅包含 None 值

python - 从 python 元组中弹出/删除项目

c++ - 在 C++ 中将函数参数检索为元组

c++ - std::allocator_traits::construct 调用了错误的构造函数

c++ - 如何为一对中的第一个提供默认值?

c++ - 如何设置类的内部结构

C++,不能将 2 个 vector 复制到一对 vector

c++ - valarray 复杂度