несколько необязательных значений по умолчанию [дубликаты]

У меня есть функция, которая принимает два целых числа со значением по умолчанию. Есть ли способ разрешить вызывающей стороне функций передавать столько параметров, сколько он хочет? (первый, но не второй, второй, но не первый, оба). пример:

void do_something(int first = 0, int second = 0);

int main()
{
   do_something(1); // first - how to declare it's the first argument
   do_something(1); // second
   do_something(1,1); 
   do_something();
   return 0; // I want to allow all those options
}

person CyberGK    schedule 10.02.2019    source источник
comment
do_something(1); // second - это невозможно. Вы должны явно передать параметр по умолчанию: do_something(0, 1);. Остальные в порядке.   -  person Yksisarvinen    schedule 10.02.2019
comment
@Yksisarvinen, вы могли бы написать это как ответ.   -  person Christophe    schedule 10.02.2019


Ответы (1)


Используйте другую встроенную функцию оболочки

   void DoSomething(int f = 0 , int s = 0)
   {}
   void inline DoSomethingS(int s = 0)
   {DoSomething(0 , s);}

Если пользователь хочет отправить второе и оставить первое необязательным, он будет использовать опции DoSomething+, в данном случае DoSomethingS.

person tomer zeitune    schedule 10.02.2019
comment
Сначала объявить, а затем реализовать без аргументов по умолчанию :) - person tomer zeitune; 10.02.2019
comment
Пропустил букву S в конце, извините. - person Paul Sanders; 10.02.2019
comment
@PaulSanders np, так у тебя все работает? - person tomer zeitune; 10.02.2019
comment
Ваше решение выглядит хорошо, да. - person Paul Sanders; 10.02.2019
comment
Так что отметьте V рядом с моим ответом - person tomer zeitune; 11.02.2019
comment
я не ОП - person Paul Sanders; 11.02.2019
comment
@PaulSanders, извините - person tomer zeitune; 11.02.2019