C++11で私は次のようなものを持っています
#include <boost/mpl/vector_c.hpp>
#include <boost/mpl/size.hpp>
#include <boost/array.hpp>
#include <iostream>
namespace mpl = boost::mpl;
template<std::size_t ... Args>
struct Test
{
typedef mpl::vector_c<std::size_t, Args ...> values_type;
static const boost::array<std::size_t, sizeof...(Args)> values;
};
int main (int argc, char** argv)
{
Test<3,2,5,6,7> test;
return 0;
}
boost::arrayの内容をmpl::vector_cの「contained」の値で初期化したいと思います。この初期化は、コンパイル時に実行する必要があります。プリプロセッサを使用したいくつかのソリューションをSOで見ましたが、それらを可変個引数テンプレートの場合に適用する方法がわかりません。
上記のサンプルコードでは、mpl::vector_cの要素がTestのテンプレートパラメータと同じであることに注意してください。実際のコードではそうではなく、代わりvalues_type
に長さ==テンプレート引数の数がありますが、実際の値は一連のmplアルゴリズムの適用から生じます。したがって、引数が同じであると想定しないでください。
質問が明確であることを願っています、ありがとう!