在 C++0x 中我想写一个这样的函数:

template <typename... Types>
void fun(typename std::tuple<Types...> my_tuple) {
    //Put things into the tuple
}

我首先尝试使用 for 循环 int i 然后执行以下操作:

get<i>(my_tuple);

然后在结果中存储一些值。然而, get 仅适用于 constexpr.

如果我能从变量中取出变量 tuple 并将它们传递给可变参数模板函数,我可以非常轻松地递归参数,但我不知道如何在不使用元组的情况下将变量从元组中取出 get. 。关于如何做到这一点有什么想法吗?或者有人有其他方法可以修改这个 tuple?

有帮助吗?

解决方案

由于“我”在

get<i>(tup)

需要是编译时常量,模板实例化用于“迭代”(实际上是递归)这些值。Boost 元组具有“长度”和“元素”元函数,这些元函数在这里会很有帮助——我假设 C++0x 也有这些。

其他提示

升压融合 值得一看。它可以“迭代” std::pair, boost::tuple, ,一些其他容器及其自己的元组类型,尽管我认为它不支持 std::tuple 然而。

AFAICT,C++元组基本上需要用递归来处理;似乎没有任何真正的方法来打包/拆包元组 除了 使用类型系统唯一的可变参数模板处理。

看一下 TR1 的 6.1.3.4 节, http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf

get 是为 const 和非 const 限定元组定义的,并返回适当的引用类型。如果将函数声明更改为以下内容:

template 
void fun(typename std::tuple& my_tuple) {
    //Put things into the tuple
}

然后,函数的参数是一个非常量元组,一旦您使用之前响应中提供的信息编写了迭代, get 将允许您进行必要的分配。

请查看我的答案,了解模板递归将元组参数展开到函数调用的示例。

如何将元组扩展为可变参数模板函数的参数?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top