Перегрузка макроса по числу параметров

107
13 января 2020, 09:00

Я хочу написать макрос FOO, так чтобы FOO(x) и FOO(x, y) делали разные вещи.
Как это сделать?

Answer 1

Вариант для Clang и GCC:

Определяем два макроса с разным количеством аргументов

#define FOO_1(x) x*100
#define FOO_2(a, b) a*b

Пишем вспомогательный макрос, который возвращает 3й переданный параметр. Он будет выбирать один из двух макросов выше.

#define FOO_SELECT(_1, _2, macro, ...) macro
#define FOO(...) FOO_SELECT(__VA_ARGS__, FOO_2, FOO_1, dummy)(__VA_ARGS__)

Если было передан один аргумент, то FOO_SELECT(1, FOO_2, FOO_1, dummy) раскроется в FOO_1.
Для двух аргументов FOO_SELECT(1, 2, FOO_2, FOO_1, dummy) раскроется в FOO_2.

READ ALSO
Не работает часть программы “банкомат” [закрыт]

Не работает часть программы “банкомат” [закрыт]

Хотите улучшить этот вопрос? Переформулируйте вопрос, чтобы он соответствовал тематике «Stack Overflow на русском»

140
Идея текстового анализатора

Идея текстового анализатора

Есть идея кода, который раскладывает текст на "сущности" с помощью шаблона CompositeДалее с отдельными данными можно как-то работать, а можно вообще...

125
Создание объекта в методе

Создание объекта в методе

В классе User добавить метод setContacts с параметрами: String email, String phoneNumberВ этом методе должен создаватся объект класса Contacts, и присваиватся в поле...

123
Malformed Json Exception

Malformed Json Exception

Когда компилирую в NetBeans, то всё работает отлично, json парсится без проблемТолько собираю проект, и когда запускаю jar файл, то вылетает такая...

145