【发布时间】:2015-08-31 14:14:15
【问题描述】:
是否有一种可移植的方式从容器的内容中生成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::tuple (真的是一个 std::array) 你是什么意思? std::uple 和 std::array 不相同。
-
Tuple 是编译时的事情,你无法在编译时知道列表中有多少 elem。无论如何,您可以使用 std::llist
::value_type -
一个
std::array支持std::tuple接口。显然容器中的所有元素都是同一类型container::value_type。所以一个真正的元组,或者一个std::array都可以。