В 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. Поэтому не думайте, что аргумент одинаков.
Надеюсь, вопрос ясен, спасибо!