// implementation
}
template<typename T>
void f(const T& val)
{
// implementation (just copy-paste from `f(T& val)`)
}
int value = 0;
f(value); // call 1, resolves to `f(T& val)`
f(int()); // call 2, resolves to `f(const T& val)`
Известен ли кому-нибудь способ схлопнуть обе перегрузки функции f в одну и избавиться от копипаста? Если просто удалить f(const T& val), то второй вызов приведет к ошибке компиляции. Знаю, что можно создать функцию f_impl, вынести в нее имплементацию и вызывать `f_impl`из двух перегрузок, но это не совсем мне подходит.
А ты удали ПЕРВУЮ из фукнций, а не вторую.
Там шаблонный код внутри обоих перегрузок. Делает разные вещи, но реализация одна
Короче, не надо быть умным тут. Сделай две функции с одинаковым на вид кодом.
> Знаю, что можно создать функцию f_impl, вынести в нее имплементацию и вызывать `f_impl`из двух перегрузок, но это не совсем мне подходит. Почему?
Потому что const T& нельзя преобразовать в T& ...
Обсуждают сегодня