Пропуск аргументов в шаблонах C++
При вызове функции шаблона можно ли пропустить тип после имени функции?
В качестве примера рассмотрим функцию
шаблон
<typename T
> void f(T var){...};
Можно ли просто назвать это так:
int x = 5;
F (X);
или я должен включить тип?
int x = 5;
е<int
>(Х);
2 ответа
Решение
Всякий раз, когда компилятор может вывести аргументы шаблона из аргументов функции, можно не указывать их. Это также хорошая практика, поскольку она облегчит чтение вашего кода.
Также вы можете оставить только аргументы шаблона конца, а не начала или середины:
template<typename T, typename U> void f(T t) {}
template<typename T, typename U> void g(U u) {}
int main() {
f<int>(5); // NOT LEGAL
f<int, int>(5); // LEGAL
g<int>(5); // LEGAL
g<int, int>(5); // LEGAL
return 0;
}
Нет ничего плохого в том, чтобы вызывать его с неявными параметрами шаблона. Компилятор сообщит вам, если он запутается, и в этом случае вам, возможно, придется явно определить параметры шаблона для вызова функции.