Предположим, у меня есть следующая функция, значение, которое она производит, необходимо многим другим функциям в коде:
float mean(foo param1, bar param2);
Другие мои функции выглядят так:
float foobar(foo param1, bar param2, float meanValue);
Я хочу сделать следующее:
float foobar(foo param1, bar param2, float meanValue = mean(param1, param2));
Хотя передача функции в качестве параметра по умолчанию является законной, компилятор (VS2008) жалуется, что param1 и param2 не объявлены, потому что параметры помещаются в стек правильно- влево, начиная с meanValue. Конечно, я не могу изменить порядок параметров, так как в этом случае я не смогу указать значение по умолчанию для первого параметра.
Я мог бы передать какое-то значение, например -10000, для среднего значения, чтобы сказать себе вызвать функцию mean(); или я мог бы перегрузить каждую функцию (а их более 10), но это не очень удобно. Я думаю, что это действительно здорово, что вы можете вызывать функцию в качестве параметра по умолчанию, и мне интересно, есть ли изящный способ выполнить то, что я пытаюсь сделать.