Я написал код для генерации boost :: mpl :: vector
для использования в качестве таблицы поиска для факториальной функции в качестве теста для более общей библиотечной функции, с помощью которой разработчик может создать таблицу поиска в форме статического массива примитивов. Функция (которая, скорее всего, будет реализована как определение макроса препроцессора) примет имя и размер инициализируемого массива, а также имя шаблона класса, который будет использоваться в качестве метафункции для инициализации каждого элемента i массива.
Я подумал, что лучший способ сделать это без использования внешних скриптов - это
boost :: mpl :: vector
, как это сделано в листинге кода ниже. , и поместите возвращаемое значение предоставленной пользователем метафункции для каждого элемента массива в конец вектора; __ VARARGS __
для достижения этой цели). Я не знаю, как я смогу выполнить (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 для инициализации статического массива?
* /