【发布时间】:2018-05-23 08:31:10
【问题描述】:
我想知道为什么某些 STL 算法没有重载以使它们可用于元组。有些人是指那些不重新排序元素的人。一个很好的例子可能是std::for_each。
是否存在语言限制,例如不可能混合编译时评估和运行时评估?让我澄清一下最后一句话:
我知道迭代本身需要成为编译时迭代,然后必须定义编译时迭代器才能使用编译时 std::get<> 来获取值。之后,应该可以将模板化的 lambda 应用于元组中的每个异生类型,但该类型的值随后会在运行时评估。
我认为这应该是可能的,即使我个人不知道从哪里开始。我看到了看起来不像std::for_each 的实现来达到相同的结果。为什么会这样?
(注意:“元组”是指std::pair 和std::tuple)
【问题讨论】:
-
考虑到
std::pair和std::tuple都允许您存储完全不同的(异构)类型,这会有点困难。当存储的类型没有共同点时,您将如何应用任何标准库算法? -
元组和对是不同数据类型的混合。当每个元素都是不同的类型时,您将如何编写通用函数?
-
难道不能用模板化的 lambda 传递一个适用于任何数据类型的函数吗?例如:
[](const auto& value){ std::cout << value; } -
auto不是“与我匹配任何类型”。auto是编译器在编译时推导出的类型。它只是一种类型。 -
难道不应该将其扩展到许多不同的仿函数类型吗?
标签: c++ tuples std-pair stl-algorithm stdtuple