функция шаблона bool без <>, что это значит? - PullRequest
2 голосов
/ 11 марта 2019

Библиотека изображений FLIF имеет следующее определение:

template bool flif_decode(FileIO& io, Images &images,
    callback_t callback, void *user_data, int, Images &partial_images,
    flif_options &, metadata_options &, FLIF_INFO* info);

Я видел специализацию шаблона, но у него все еще есть угловые скобки. Что это значит?

1 Ответ

3 голосов
/ 11 марта 2019

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

См. [Temp.explicit] ( exmphasis mine )

Если явное создание экземпляра для функции или функции-члена, unqualified-id в объявлении должно быть либо template-id , либо , где все аргументы шаблона могут быть выведены , имя-шаблона или идентификатор-функции-оператора .

Стандарт обеспечивает этот сопровождающий пример:

template void sort(Array<char>&); // argument is deduced here

В вашем примере объявление функции (которое также является определением) выглядит так:

template <typename IO>
bool flif_decode(IO& io, /*etc*/) { /*...*/}

Итак, когда мы позже увидим явный экземпляр, подобный этому:

template bool flif_decode(FileIO& io, /*etc*/);

Компилятор может определить, что FileIO - это тип, который вы хотите использовать для typename IO

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