2

さらに私の質問C++ Tuple of Boost.Range - get Tuple of element types?

私は次のものを持っています:

TupleOfRanges ranges; 
TupleOfElements elements;

std::vector<int> offsets;

すべてのコンテナー (メタとランタイムの両方) は sizeNです。次のことを行うコードを書きたいと思います。

boost::fusion::at_c<0>(elements) 
    = *(boost::begin(boost::fusion::at_c<0>(ranges)) + offset[0]);
boost::fusion::at_c<1>(elements) 
    = *(boost::begin(boost::fusion::at_c<1>(ranges)) + offset[1]);
// ...
boost::fusion::at_c<N>(elements) 
    = *(boost::begin(boost::fusion::at_c<N>(ranges)) + offset[N]);

Fusion のtransform操作を使用してこれを記述しようとしましたが、問題は、ファンクターが操作対象の要素のインデックスを認識していないように思われます。

私は次のようなことを考えました:

elements 
    = boost::fusion::transform(boost::fusion::zip(ranges, indices), getValue);

indicesどういうわけかFusionシーケンスを含むことができればうまくいくかもしれませんint 0...N

それで、誰かが昇順を作るのを手伝ってくれますか、それとも私の目標を達成するためのより良い方法を見つけることができますか? どうもありがとう。

4

1 に答える 1

1

boost::mpl::range_cを使用して、昇順の非型テンプレート パラメータのシーケンスを取得できます。このシーケンスを別の mpl::sequence にコピーする必要があります。これは、範囲が で使用するために必要な概念要件をすべて満たしていないためtransformです。シーケンスは で調整できますfusion

于 2011-08-11T13:46:54.983 に答える