Скопируйте mpl::vector_c в статический массив во время компиляции

В 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 со значениями 'contained' в mpl::vector_c. Эта инициализация должна быть выполнена во время компиляции.Я видел на SO некоторые решения, использующие препроцессор, но я понятия не имею, как применить их к вариадному шаблону.

Обратите внимание, что в приведенном выше примере кода элементы mpl::vector_c совпадают с параметрами шаблона Test. В фактическом коде это не так, вместо этого values_typeимеет длину == количество аргументов шаблона, но фактические значения являются результатом применения последовательности алгоритмов mpl. Поэтому не думайте, что аргумент одинаков.

Надеюсь, вопрос ясен, спасибо!

5
задан ildjarn 31 May 2012 в 18:58
поделиться