可変数の値を使用する初期化関数のファミリーが必要です。私はそれらを使用して、Eigenライブラリで収集操作を実装しています。これが、ベクトルの長さごとに1つのテンプレートを使用して現在行っている方法です。
template<typename T1, typename T2>
inline void gather (Array<T1,4,1> &to, const Array<T2,Dynamic,1> &from, const Array<int,4,1> &index)
{
to << from[index[0]], from[index[1]], from[index[2]], from[index[3]];
}
template<typename T1, typename T2>
inline void gather (Array<T1,6,1> &to, const Array<T2,Dynamic,1> &from, const Array<int,6,1> &index)
{
to << from[index[0]], from[index[1]], from[index[2]], from[index[3]], from[index[4]], from[index[5]];
}
上記のようなテンプレートの長いリストを、長さパラメーター(上記のスニペットの4と6)でパラメーター化された単一のテンプレートに置き換える方法はありますか?もしそうなら、それは以前のC ++ 11言語仕様で行うことができますか(私はVisual Studio 2010を使用しています)?
from
場合によってはコンパイル時の初期化(constおよび)が生成される可能性があるため、コンマ区切りの値の構文を保持したいと思いますindex
。しかし、私はこの仮定が間違っているかもしれません。イニシャライザリストには1〜16個の値を指定できます。空のリストについて心配する必要はありません。