У меня есть такое и на дефайнах и на шаблонах #define RAW_td(_A_type,_A_Size,Name) \
struct _##Name {u16_t _rPtr, _wPtr, _Q, _Lock; \
static constexpr u16_t _S = (1<<_A_Size) ; \
static constexpr u16_t _M = ((1<<_A_Size)-1) ; \
_A_type _A[(1<<_A_Size)]; \
} Name;
template <uint16_t _A_Size, typename _A_type> class RAW16 {
private:
public:
enum {
_S = (1<<_A_Size),
_M = (_S - 1),
};
_A_type _A[_S];
struct _F {
u16_t _rPtr;
u16_t _wPtr;
u16_t _Q;
};
};
RAW16<10, sint32_t> A_Raw;