Я нахожусь на коре руки-A72. Чтобы получить доступ к битовым полям регистров системы моего ядра, я использую механизм генерации макрода. Для простоты я заменил void reaverload = (const uint64_t v) и uint64_t reaverload () () с тестированием переменной -члена в моих детских структурах:
Код: Выделить всё
#include
#define CHILD(name, start, N) struct name##_t { \
int test; \
}; name##_t name;
#define PARENT(R, ...) \
struct R { \
R() = default; \
__VA_ARGS__ \
};
#define PARENTS() \
X(ParentA, \
CHILD(ChildA,0,64)) \
X(ParentB, \
CHILD(ChildA, 32, 1) \
CHILD(ChildB, 0, 1))
#define X(...) PARENT(__VA_ARGS__)
PARENTS()
#undef X
int main() {
return ParentB().ChildA.test;
}
< /code>
Вопрос < /h2>
Во время реализации мне было интересно, как, я мог бы использовать рекурсивный макро -механизм, похожий на рекурсивные шаблоны. Чтобы быть более конкретным, я борюсь с самореференциальным макро-механизмом в моем коде: < /p>
#define CHILD(pName, cName, start, N, ...) struct cName##_t { \
int test; \
}; cName##_t cName; CHILD(pName,__VA_ARGS__);
#define PARENT(R, ...) \
struct R { \
R() = default; \
CHILD(R,__VA_ARGS__) \
};
PARENT(ParentA, ChildA,0,64);
PARENT(ParentB, ChildA, 32, 1, ChildB, 0, 1);
Подробнее здесь: https://stackoverflow.com/questions/797 ... ial-marcos
Мобильная версия