Предположим, что существует функция со значением по умолчанию:Как обрабатывать значения по умолчанию в (глубоко) вложенных вызовах функций?
int foo(int x=42);
Если это называется другими, как это:
int bar(int x=42) { return foo(x); }
int moo(int x=42) { return bar(x); }
Это, конечно, просто надуманный пример. Тем не менее, иногда у меня очень похожая ситуация. Параметр только что передается с самого высокого уровня (moo
) до самого низкого уровня, и только там он фактически используется. Плохая вещь об этом заключается в том, что когда я изменяю foo
, чтобы иметь значение по умолчанию, отличное от 42
, мне пришлось бы искать всех абонентов и соответственно менять значение по умолчанию.
Есть ли какой-нибудь шаблон/идиома, чтобы избежать этой ситуации?
Единственное простое решение, которое приходит на ум, это
int bar() { return foo(); }
int bar(int x) { return foo(x); }
Однако, как я немного ленив и в реальном коде это приведет к довольно кода дублирования, я хотел бы избежать этого.
Я бы сказал, что вы не должны использовать значение по умолчанию для параметров по умолчанию. Для тех, кто использовал бы переменные const с переменными имен. Значения параметров по умолчанию хороши для таких вещей, как * sane * значения инициализации (zero/nullptr/false). – Galik