私は持っている
mpl::vector_c<int, 0, 1, 2, 3, 4, 5>
30 に設定したいとします。したがって、メタ関数を作成してインデックス、ベクトル、新しい値を取得し、変更されたシーケンスを返す必要があります。私は次の解決策で終わった
template <int k, class sequence, class value>
class assign_element
{
typedef typename mpl::begin<sequence>::type begin;
typedef typename mpl::advance<begin, mpl::int_<k> >::type pos;
typedef typename mpl::erase <sequence, pos>::type sequence2;
typedef typename mpl::begin<sequence2>::type begin2;
typedef typename mpl::advance<begin2, mpl::int_<k> >::type pos2;
public:
typedef typename mpl::insert <sequence2, pos2, value>::type type;
};
そして、私はそれを次のように使用します
typedef mpl::vector_c<int, 0, 1, 2, 3, 4, 5> sequence;
typedef typename assign_element<3, sequence, mpl::int_<30> >::type result;
このソリューションは機能しますが、ご覧のとおり、非常に複雑です (反復子、進行などを含む)。このユースケースに対して、よりシンプルでおそらく効率的な解決策はありますか? 前もって感謝します!