Я работаю над простым языком предварительного процессора в стиле lisp. В API я хочу, чтобы пользователи могли передавать массивы любого размера и размера в препроцессор, с которыми можно манипулировать с помощью языка. В настоящее время у меня есть перечисление типов;хранение многомерных массивов в c
typedef enum LISP_TYPE
{
LT_UINT,
LT_FLOAT,
LT_ARRAY
...,
...
} _LISP_TYPE;
У меня возникли проблемы с поиском эффективного и удобного метода хранения массивов, а также доступа к ним. Существует еще одна структура, которую я использую специально для массивов;
typedef struct _lisp_array
{
LISP_TYPE type;
unsigned int length;
void* data;
} lisp_array;
Когда препроцессор Престола атом список с типом LT_ARRAY, он преобразует его void*
(корд в LISP выражении) к указанной выше структуре. Там, где возникают проблемы, выясняется, как обращаться к многомерным массивам. Я думал о вычислении значения шага для перемещения массива, но могу ли я гарантировать, что все переданные массивы будут смежно распределены?
Любая помощь приветствуется.
Не можете ли вы просто использовать шаблоны C++? – ch0kee