2012-01-19 22 views
4

を使用して具体的な一ブースト::タプル型の構築:は、与えられた別の

は高めのtypedef ::タプル< T1、T2、T3、...、Tnの> Tuple_Tn

タイプT1を

のtypedef:、... Tnには、すべての

そして、与えられた型T_another、私は新しいタプル型を定義したいのですが、定義されています後押し::タプル< T1、T2、T3、...、Tnのを、T_another> Tuple_T_plus_1

しかし、ここでは私の問題である:私はそれを定義したい場所で私だけのタイプTuple_TnとT_anotherへのアクセス権を持っています。

言い換えれば、Tuple_T_plus_1をTuple_TnとT_anotherだけで定義することは可能ですか?

答えて

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に達成されましたが、書くのはずっと面倒です。

+0

はい、バリデーショナルテンプレートは素晴らしいです。残念ながら、VS 2010はそれをサポートしていません。とにかくありがとう :) – Lev