c++ Boost元组.获取元素类型的元组
C++ Tuple of Boost.Range - get Tuple of element types?
我正在尝试Boost。Range和Boost元组。如果我有一个元组的范围,我如何定义一个元组或相应的元素值?换句话说,我在这里用什么代替/*?*/
:
typedef boost::tuples::tuple<std::vector<int>&, char[]> TupleOfRanges;
typedef /*?*/ TupleOfElements;
当然,我也可以手写,我会写:
typedef boost::tuples::tuple<int, char> TupleOfElements;
甚至:
typedef typename boost::tuples::element<0, TupleOfRanges>::type Range0;
typedef typename boost::tuples::element<1, TupleOfRanges>::type Range1;
typedef typename boost::range_iterator<Range0>::type Iterator0;
typedef typename boost::range_iterator<Range1>::type Iterator1;
typedef typename boost::iterator_value<Iterator0>::type Value0;
typedef typename boost::iterator_value<Iterator1>::type Value1;
typedef boost::tuples::tuple<Value0, Value1> TupleOfElements;
但我认为应该有可能直接从TupleOfRanges
导出TupleOfElements
,无论元组大小。欢迎任何想法!
编辑:这似乎工作,感谢@ltjax:
struct GetIteratorType
{
template <class Range>
struct apply
{
typedef typename boost::range_iterator<Range>::type type;
};
};
typedef boost::mpl::transform<TupleOfRanges, GetIteratorType> TupleOfIterators;
struct GetElementType
{
template <class Iterator>
struct apply
{
typedef typename boost::iterator_value<Iterator>::type type;
};
};
typedef boost::mpl::transform<TupleOfIterators, GetElementType> TupleOfElements;
使用boost::mpl::transform
与您编写的类型定义链作为函子!
见http://www.boost.org/doc/libs/1_47_0/libs/mpl/doc/refmanual/transform.html
相关文章:
- 在C++中,如何通过几种类型从元组中选择多个元素
- 将元组类型扩展为可变参数模板?
- 时间复杂度 当具有复合数据类型(如元组或对)时?
- 创建派生自可变参数模板包的类型元组
- 枚举元组类型的最佳方法?
- 验证(使用 static_assert)元组类型是否遵循某种顺序(有状态编译时检查)
- C 元组类型用于功能参数类型
- C++ 如何根据部分特化制作 std::元组类型?
- 在运行时基于基础元组类型生成元素
- 模板函数,具有元组类型子集的相应参数
- 获取级联元组类型;组合result_of和tuple_cat
- 类元组类型(tuple,pair)的模板重载
- 如何将l值元组类型转换为值元组类型
- 使用C++元组类型作为映射中的键
- 转换元组类型
- 如何从旧的元组类型和boost中的类型创建新的元组类型
- 使用另一个构造一个具体的boost::元组类型
- 如何反转元组类型中元素类型的顺序
- 增强元组类型的hana大小
- 测试类型 V 是否属于没有变变量的元组类型<...>