Можно ли определить структуру с переменным размером массива. что-то вроде этого:
#define CHAR_ARRAY(MAX_LENGTH) struct CHAR_ARRAY_#MAX_LENGTH{char data[MAX_LENGTH]; int length;};
так что с помощью только указанного макроса я мог бы определить разные типы данных следующим образом.
struct Data{
CHAR_ARRAY(4) a;
CHAR_ARRAY(8) b;
};
Из-за особых требований существующего кода требуется простой старый тип, определенный с помощью "struct", без использования std :: array, vector и т.д., Указатель не принимается, поскольку наш устаревший код имеет требование быть простым старым типом, поэтому назначение или копирование можно легко обрабатывать.
Да, это возможно. Вам вообще не нужно указывать структуру, что упрощает макрос:
#define CHAR_ARRAY(MAX_LENGTH) struct {char data[MAX_LENGTH]; int length;}
(Использование, как в вашем примере.)
Тем не менее, Im все еще не совсем ясно о цели этого макроса, так как это существенно реинжинирует, плохо, существующую функциональность. По крайней мере, вы должны использовать шаблон вместо макроса для генерации типа для вас:
template <std::size_t N>
struct char_array { char data[N]; std::size_t length; };
А затем введите тип элемента generic:
template <typename T, std::size_t N>
struct array { T data[N]; std::size_t length; };
... и теперь это становится ослепительно очевидным, что это плохая повторная реализация std::array
, и что нет никакой пользы не только в использовании последнего.
##
, а не#
.