2

在 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.

如果我可以将变量tupleget. 关于如何做到这一点的任何想法?或者有没有人有另一种修改方式tuple

4

5 回答 5

4

由于“我”在

get<i>(tup)

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

于 2008-09-17T06:39:14.343 回答
3

Boost.Fusion值得一看。它可以“迭代” std::pair, boost::tuple、其他一些容器和它自己的元组类型,尽管我认为它std::tuple还不支持。

于 2008-09-17T07:05:15.263 回答
0

查看 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 将允许您进行必要的分配。

于 2008-09-19T16:17:30.260 回答
0

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

于 2008-09-19T16:20:49.863 回答
0

在这里查看我的答案,以获取将元组参数展开到函数调用的模板递归示例。

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

于 2009-10-23T03:52:41.177 回答