Макросы...
От: Аноним  
Дата: 26.04.03 15:30
Оценка:
В статье по реализации делегатов на С++ надо было получить лексему через макросы:

#define SUFFIX 5

#define COMBINE(a,b)       COMBINE1(a,b)
#define COMBINE1(a,b)      a##b

#define I_DELEGATE         COMBINE(IDelegate, SUFFIX)
#define C_STATIC_DELEGATE  COMBINE(CStaticDelegate, SUFFIX)
#define C_METHOD_DELEGATE  COMBINE(CMethodDelegate, SUFFIX)
#define C_DELEGATE         COMBINE(CDelegate, SUFFIX)


К чему здесь COMBINE1? Я согласен, что в ином случае код не компилиться...
Вроде бы вот что происходит:
1) Строчка
#define I_DELEGATE         COMBINE(IDelegate, SUFFIX)

меняеться на
#define I_DELEGATE         COMBINE(IDelegate, 5)

2) Потом, когда в где-нибудь в коде встретиться I_DELEGATE (или др.), то выполниться макром
#define COMBINE(a,b)       COMBINE1(a,b)

но ведь если a — это I_DELEGATE и b — это 5, то вполне возможно написать и такое:
#define COMBINE(a,b)       a##b


Но я уверен, что заюлуждаюсь, т.к. это неправельно... Зачем все-таки нужен этот промежуточный макрос?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.