#cpp #шаблоны_с++
Есть шаблонная функция: templatevoid function(T1 a, T1 b, T2 c) { ... } Требуется, чтобы 3 параметр имел дефолтное значение. То есть хочется, чтобы было как-то так: template void function(T1 a, T1 b, T2 c = С) { ... } Но при вызове функции от 2 аргументов выдает ошибку. Как я понимаю дело в втором параметре шаблона. Нужно как-то тоже ему придать дефолтное значение.
Ответы
Ответ 1
Как бы это выразиться... Вы вызываете f(a,b) - и что должен делать компилятор, не имея никакой информации о типе третьего параметра? Тип тоже надо умолчать... Что-то вроде: templatevoid f(T a, T b, U c = U(0)) { cout << a << " " << b << endl; cout << typeid(c).name() << endl; cout << c << endl; } int main() { f(0,1,3); f(0,1,3.0); f(0,1); } Ответ 2
Аргументы по умолчанию не участвуют в процессе дедукции шаблонных параметров. Поэтому дедукция типа T2 из вызова функции function с двумя аргументами сделана быть не может быть сделана на основе типа C. Пользуйтесь перегрузкой вместо умолчательных аргументов templatevoid function(T1 a, T1 b, T2 c) { ... } template void function(T1 a, T1 b) { function(a, b, C); }
Комментариев нет:
Отправить комментарий