给定:
typedef boost::tuple<T1,T2,T3。。。,Tn>Tuple_Tn
其中类型T1、。。。Tn都已定义,
给定类型T_another,我想定义一个新的元组类型:
typedef boost::tuple<T1,T2,T3。。。,Tn,T_other>Tuple_T_plus_1
但我的问题是:在我想定义它的地方,我只能访问类型Tuple_Tn和T_another。
换句话说,是否可以仅根据Tuple_Tn和T_another来定义Tuple_T_plus_1?
我不确定Boost.Tuple中是否有这样的功能,也许Boost.Fusion更适合您的需求。
然而,如果您有一个支持C++11可变模板的编译器,您可以切换到std::tuple
并编写一个小的元函数,用于将类型附加到现有元组:
template <typename Container, typename T>
struct push_back;
template <template <typename...> class Container, typename T, typename... Args>
struct push_back<Container<Args...>, T>
{
typedef Container<Args..., T> type;
};
typedef std::tuple<int, double> myTuple;
typedef push_back<myTuple, bool>::type myOtherTuple;
myOtherTuple(1, 0.0, true);
boost::tuple
也可以实现同样的功能,但编写起来会更加乏味。