4

与えられた:

typedef boost::tuple< T1, T2, T3, ..., Tn > Tuple_Tn

ここで、型 T1、... Tn はすべて定義されています。

そして、型 T_another が与えられたので、新しいタプル型を定義したいと思います:

typedef boost::tuple< T1, T2, T3, ..., Tn, T_another > Tuple_T_plus_1

しかし、ここに私の問題があります。それを定義したい場所では、タイプ Tuple_Tn と T_another にしかアクセスできません。

つまり、 Tuple_T_plus_1 を Tuple_Tn と T_another だけで定義することは可能でしょうか?

4

1 に答える 1

3

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、書くのははるかに面倒です。

于 2012-01-19T17:07:22.160 に答える