Стандартные аргументы и переменные функции - PullRequest
10 голосов
/ 09 ноября 2010

Можно ли указать параметр по умолчанию в функции с переменными параметрами (также относится к шаблонам)

Ответы [ 4 ]

8 голосов
/ 09 ноября 2010

В C ++ вы можете заменить функцию variadic функцией, основанной на идиоме именованных параметров.

См. Пункт C ++ FAQ 10.20 Что такое "идиома именованных параметров"? .

Это дает вам функциональность по умолчанию и удобные обозначения.

Приветствия и hth.,

3 голосов
/ 09 ноября 2010

Сначала ответ C ++.

Параметр по умолчанию - это параметр, для которого вы будете знать, что функция должна и будет видеть, как предусмотрено.Таким образом, вы должны окончательно назвать эти параметры и затем предоставить аргументы по умолчанию.Это будет «короткая» версия вашей функции.

Если в дополнение к этим заданным по умолчанию аргументам вы хотите иметь возможность иметь список аргументов va_arg, просто перегрузите вашу функцию второй версией, которая делаетименно это.Для этой «длинной» версии вы все равно должны предоставить все аргументы, поэтому не имеет смысла иметь аргументы по умолчанию, здесь.

Теперь ответ C

Возможно, вы не рассматривали такиевещь, но с помощью va_arg macro функций C99 можно определить аргументы по умолчанию для функций в C .Синтаксис макроса в этом случае является более разрешающим, чем для C ++, так как вы можете опустить аргументы в середине вызова функции, а не только в конце.Поэтому, если бы вы объявили вашу функцию как-то вроде

int toto(int a, ...)

и указали аргументы по умолчанию для позиций 2 и 3, скажем, вы могли бы назвать ее как

toto(4,5,,,37);

Так что в этом смысле вС этим можно сделать то, что вы просили.Я лично, конечно, не решился бы сделать это.

3 голосов
/ 09 ноября 2010

Зачем вам нужны переменные и параметры по умолчанию?

Например,

myFunc(int a=5, int b=5, int c=5);

может принимать 0-3 параметра со значениями по умолчанию и

myFunc(...)

может выявить любое количество параметров.Внутри функции вы можете проверить пропущенные параметры и заполнить значения по умолчанию, как требуется.

2 голосов
/ 09 ноября 2010

Нет, нет способа сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...