Как я могу четко указать, какие аргументы я передаю, а какие остаются по умолчанию?

Спрошено из-за этого : Аргумент по умолчанию в c ++

Скажем, у меня есть такая функция: void f (int p1 = 1, int p2 = 2, int p3 = 3, int p4 = 4);

И я хочу вызвать это, используя только некоторые аргументы - остальные будут значениями по умолчанию.

Что-то вроде этого могло бы работать:

template
void f(int p1=1, int p2=2, int p3=3, int p4=4);
// specialize:
template<>
void f(int p1) {
  f(1, p1);
}
template<>
void f(int p1, int p2) {
  f(1, p1, p2);
}
// ... and so on. 
// Would need a specialization for each combination of arguments
// which is very tedious and error-prone

// Use:
f(5); // passes 5 as p2 argument

Но для практического применения требуется слишком много кода.

Есть ли лучший способ сделать это?

8
задан Community 23 May 2017 в 12:01
поделиться