Страницы

Поиск по вопросам

четверг, 2 января 2020 г.

Шаблонная функция

#cpp #шаблоны_с++


Есть шаблонная функция: 

template 
void function(T1 a, T1 b, T2 c) { ... }


Требуется, чтобы 3 параметр имел дефолтное значение. То есть хочется, чтобы было
как-то так:

template 
void function(T1 a, T1 b, T2 c = С) { ... }


Но при вызове функции от 2 аргументов выдает ошибку. Как я понимаю дело в втором
параметре шаблона. Нужно как-то тоже ему придать дефолтное значение.
    


Ответы

Ответ 1



Как бы это выразиться... Вы вызываете f(a,b) - и что должен делать компилятор, не имея никакой информации о типе третьего параметра? Тип тоже надо умолчать... Что-то вроде: template void 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. Пользуйтесь перегрузкой вместо умолчательных аргументов template void function(T1 a, T1 b, T2 c) { ... } template void function(T1 a, T1 b) { function(a, b, C); }

Комментариев нет:

Отправить комментарий