gpt4 book ai didi

c++ - 从标准容器生成 std​​::tuple

转载 作者:搜寻专家 更新时间:2023-10-31 00:32:03 27 4
gpt4 key购买 nike

有没有一种可移植的方法来生成 std::tuple (真的是 std::array )来自容器的内容?这样的元组将允许 std::apply从容器中提取函数参数。

我第一次尝试使用尾递归,但因编译器错误而失败:“递归模板实例化超出最大值...”。

我的第二次尝试(std::for_each 带有一个可变的 lambda 元组)无法得到预期的编译结果。

我假设一些事情是如何boost::mpl处理可变元函数(即使用 boost::preprocessor 的魔法)可以工作——但 c++03 就是这样。我希望有更好的解决方案。

函数签名看起来像这样:

std::list<int> args_as_list = {1, 2, 3, 4};
auto tpl = args_as_tuple(args_as_list);

tpl 的类型是std::array<int const, 4> .

最佳答案

简短回答:,这是不可能的。

解释:两者都是std::tuplestd::array需要有关元素数量的编译时信息。 std::liststd::vector只能提供有关元素计数的运行时信息。

你的args_as_tuple函数必须是一个模板,将预期参数的数量作为模板参数(args_as_tuple<4>(args_as_list))。

虽然必须将参数数量作为模板参数似乎很苛刻,但在您的示例中,这很明显 - 函数参数数量(提供给 std::apply 的函数)也必须在编译时已知。
对于更通用的代码,您可以使用:function-traits或来自 this answer 的代码.
或者使用 std::array从乞讨而不是std::list (很多通用模板代码,但编译时检查很好)

关于c++ - 从标准容器生成 std​​::tuple,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32313372/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com