我想知道为什么某些 STL 算法没有重载以使其可用于元组。一些,我的意思是那些不重新排序元素的。一个很好的例子可能是 std::for_each
.
是否存在语言限制,例如可能无法混合编译时评估和运行时评估?让我澄清最后一句话:
我知道迭代本身需要成为编译时迭代,然后必须定义编译时迭代器才能使用编译时 std::get<>
获取值。之后,应该可以将模板化的 lambda 应用于元组中的每个异构类型,但该类型的值随后会在运行时求值。
我认为这应该是可能的,即使我个人不知道从哪里开始。我看到的实现看起来不像 std::for_each
完全可以达到相同的结果。为什么会这样?
(注意:“元组”是指 std::pair
和 std::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/