Преобразование вектора MPL в статический массив

Я написал код для генерации boost :: mpl :: vector для использования в качестве таблицы поиска для факториальной функции в качестве теста для более общей библиотечной функции, с помощью которой разработчик может создать таблицу поиска в форме статического массива примитивов. Функция (которая, скорее всего, будет реализована как определение макроса препроцессора) примет имя и размер инициализируемого массива, а также имя шаблона класса, который будет использоваться в качестве метафункции для инициализации каждого элемента i массива.

Я подумал, что лучший способ сделать это без использования внешних скриптов - это

  1. Создать boost :: mpl :: vector , как это сделано в листинге кода ниже. , и поместите возвращаемое значение предоставленной пользователем метафункции для каждого элемента массива в конец вектора;
  2. Используйте элементы вектора для инициализации статического массива (возможно, используя серию макросов, последний из который использовал бы макрос __ VARARGS __ для достижения этой цели).

Я не знаю, как я смогу выполнить (2), ни является ли описанная мной процедура хорошим способом делать то, что я ищу. Вот следующие вопросы, на которые я хотел бы получить ответы:

  1. Является ли моя процедура хорошим способом достижения того, что я ищу? Если нет, опишите лучшую процедуру, которая позволила бы сделать то же самое. без использования внешних скриптов.
  2. Если моя процедура действительно является хорошим способом выполнить то, что я ищу, как мне реализовать (2)?

    Я обязательно опубликую ссылку на исходный файл, содержащий библиотечную функцию который я описываю, как только внедряю его. Листинг кода приведен ниже.

    пространство имен mpl = boost :: mpl;

     template 
    struct factorial:
     mpl :: if_ >,
     mpl :: multiplies >,
     mpl :: int_ <1>
     > :: type
    {};
    
    шаблон <последовательность имен типов, размер имен типов>
    struct compileTable:
     mpl :: if_ >,
     compileTable <
     mpl :: push_front <последовательность, факториал <размер>> :: тип,
     size :: Prior
     >,
     последовательность
     > :: type
    {};
    
    статическая константа int TABLE_SIZE = 13;
    
    typedef compileTable <
     mpl :: vector <>,
     mpl :: int_ <РАЗМЕР_ТАБЛИНЫ>
    > :: type factorialTable;
    
    / *
    ** Вот где я застрял; как бы я использовал элементы
    ** из factorialTable для инициализации статического массива?
    * /
    
5
задан Brian Tompsett - 汤莱恩 20 June 2016 в 12:42
поделиться