目前我认为我能够做到以下几点:
apply([](auto&... e) { forward_as_tuple((e.do_something(), 0)...); }, t);
这里的 t 是元组。这种方式不容易阅读。还有其他的方式吗?谢谢。
目前我认为我能够做到以下几点:
apply([](auto&... e) { forward_as_tuple((e.do_something(), 0)...); }, t);
这里的 t 是元组。这种方式不容易阅读。还有其他的方式吗?谢谢。
for (auto e : my_tuple)
e
可能需要是不同的类型 - 这是与语言中我们所习惯的迭代非常不同的一种迭代方式。提案 P1306 提出了一种全新的 for
循环来解决这个问题,称为 for...
。tuple
是同构的,你可以将其转换为 std::array
。即使你的 tuple
是异构的,仍然可以将其转换为一个由所有唯一类型组成的 std::any
数组或 std::variant<Ts...>
数组,其中包含 tuple
包含的所有唯一类型。也许这解决了你的问题,也可能不是。std::apply
(它一次性给你 所有 元素)或者你可以编写自己的版本,它逐个传递一个元素,这样你就会得到一元 lambda。