#include <iostream>
using namespace std;
template<typename T>
T cal(T x, T z) {
return x + z;
}
int main()
{
cout << cal(7, 8.0);
} Но программа сообщает об ошибке, как ее можно решить ?
7.0
а если мы хоть чтоб был тип integer ?
Можно допускать параметры различных шаблонных типов, либо положить один в undeducible context, выводящийся из первого.
извините как вы переделали пример ?
Если у вас параметры разные то и в шаблоне их сделайте разными
template < typename Tl, typename Tr > auto cal ( Tl lhs, Tr rhs ) -> decltype(lhs + rhs); Что-то подобное, например.
я так понимаю, чтобы разобраться, что вернётся нужно знать правила преобразования типов?
Компилятор их знает и, таким образом, возвращаемый тип выводит.
ну это я понимаю, но я как программист, когда пишу код, должен же закладываться на конкретное поведение, в данном случае, при вызове функции, я дожен знать как будут производиться преобразования тапов, чтобы не получить неожиданный результат
Не в этом смысле, полагаю: подобный шаблон для двух произвольных типов может возвращать любой пользовательский третий, предугадать который заранее невозможно.
а автовывод не будет работать в вашем варианте?
Будет, об этом и речь. Но Вы-то при написании шаблона знать результат не можете.
всё, понял, спасибо
Вы хоть о компиляторе позаботьтесь. Вы не указываете ему тип в шаблон, он должен сам его вывести, в одном месте вроде это int, в другом double, что ему остаётся делать?
Как лучше код записать покажите пример пожалуйста
Обсуждают сегодня