Пропуск аргументов в шаблонах C ++ - PullRequest
6 голосов
/ 18 июля 2009

При вызове функции шаблона можно ли пропустить тип после имени функции?

В качестве примера рассмотрим функцию

template <typename T> void f (T var) {...};

Можно ли просто назвать это так:

int x = 5;
F (X);

или у меня есть для включения типа?

int x = 5;
е <int> (х);

Ответы [ 2 ]

17 голосов
/ 18 июля 2009

Всякий раз, когда компилятор может вывести аргументы шаблона из аргументов функции, можно не указывать их. Это также хорошая практика, поскольку она облегчит чтение вашего кода.

Кроме того, вы можете оставить только аргументы шаблона конца, а не начала или середины:

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;
}
10 голосов
/ 18 июля 2009

Нет ничего плохого в том, чтобы вызывать его с неявными параметрами шаблона. Компилятор сообщит вам, если он запутается, и в этом случае вам может понадобиться явно определить параметры шаблона для вызова функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...