Условие остановки для самореференциальных MarcosC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Условие остановки для самореференциальных Marcos

Сообщение Anonymous »

фон < /h2>
Я нахожусь на коре руки-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);
может быть решена эта самореференциальная проблема макроса путем введения хорошего условия остановки без использования макроса for_each с пределом итераций?

Подробнее здесь: https://stackoverflow.com/questions/797 ... ial-marcos
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»