__VA_ARGS__ больше одного
От: _NN_ www.nemerleweb.com
Дата: 18.12.19 13:22
Оценка:
Есть ли простой способ узнать передали в макрос более одного аргумента или только один ?

Нужно поставить скобки вокруг если есть более одного аргумента, и не ставить если один.

A(a)    => a
A(a, b) => (b, c)
http://rsdn.nemerleweb.com
http://nemerleweb.com
Отредактировано 18.12.2019 13:30 _NN_ . Предыдущая версия .
Re: __VA_ARGS__ больше одного
От: niXman Ниоткуда https://github.com/niXman
Дата: 18.12.19 13:34
Оценка:
Здравствуйте, _NN_, Вы писали:

BOOST_PP_TUPLE_SIZE():
https://www.boost.org/doc/libs/1_71_0/libs/preprocessor/doc/ref/tuple_size.html

или без буста?
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re: __VA_ARGS__ больше одного
От: niXman Ниоткуда https://github.com/niXman
Дата: 18.12.19 13:36
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Нужно поставить скобки вокруг если есть более одного аргумента, и не ставить если один.

BOOST_PP_IF(BOOST_PP_GREATER(BOOST_PP_TUPLE_SIZE(__VA_ARGS__), 1), MACRO_1, MACRO_2)
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Отредактировано 18.12.2019 13:38 niXman . Предыдущая версия .
Re: __VA_ARGS__ больше одного
От: rg45 СССР  
Дата: 18.12.19 13:37
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Нужно поставить скобки вокруг если есть более одного аргумента, и не ставить если один.


_NN>
_NN>A(a)    => a
_NN>A(a, b) => (b, c)
_NN>


В C++20 будет такая полезная штука, как __VA_OPT__:

#define A(...) __VA_OPT__(MY_LEFT_BRACKET) __VA_ARGS__ __VA_OPT__(MY_RIGHT_BRACKET)
--
Не можешь достичь желаемого — пожелай достигнутого.
Re[2]: __VA_ARGS__ больше одного
От: niXman Ниоткуда https://github.com/niXman
Дата: 18.12.19 13:39
Оценка:
Здравствуйте, rg45, Вы писали:

R>В C++20 будет такая полезная штука, как __VA_OPT__:


да, в с++20...
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Отредактировано 18.12.2019 13:40 niXman . Предыдущая версия .
Re[2]: __VA_ARGS__ больше одного
От: _NN_ www.nemerleweb.com
Дата: 18.12.19 13:41
Оценка:
Здравствуйте, rg45, Вы писали:

R>В C++20 будет такая полезная штука, как __VA_OPT__:

Мы все с нетерпением ждём, а пока нужно решать насущные проблемы
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[3]: __VA_ARGS__ больше одного
От: rg45 СССР  
Дата: 18.12.19 13:41
Оценка:
Здравствуйте, niXman, Вы писали:

R>>В C++20 будет такая полезная штука, как __VA_OPT__:


X>да, в с++20...


А я как написал?
--
Не можешь достичь желаемого — пожелай достигнутого.
Re[2]: __VA_ARGS__ больше одного
От: _NN_ www.nemerleweb.com
Дата: 18.12.19 13:42
Оценка:
Здравствуйте, niXman, Вы писали:

X>Здравствуйте, _NN_, Вы писали:


_NN>>Нужно поставить скобки вокруг если есть более одного аргумента, и не ставить если один.

X>BOOST_PP_IF(BOOST_PP_GREATER(BOOST_PP_TUPLE_SIZE(__VA_ARGS__), 1), MACRO_1, MACRO_2)

Так я тоже могу, но хотелось бы решения попроще и побыстрее в скорости компиляции
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[4]: __VA_ARGS__ больше одного
От: niXman Ниоткуда https://github.com/niXman
Дата: 18.12.19 13:42
Оценка: +1 :)
Здравствуйте, rg45, Вы писали:

R>А я как написал?


это было сожеление)
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re: __VA_ARGS__ больше одного
От: night beast СССР  
Дата: 18.12.19 14:10
Оценка: 11 (3)
Здравствуйте, _NN_, Вы писали:

_NN>Есть ли простой способ узнать передали в макрос более одного аргумента или только один ?


https://stackoverflow.com/questions/11761703/overloading-macro-on-number-of-arguments

_NN>Нужно поставить скобки вокруг если есть более одного аргумента, и не ставить если один.


а всегда ставить нельзя?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.