Правильный синтаксис зависит от того, что вы на самом деле пытаетесь сделать. Добавление <>
- это НЕ просто способ исправить Doxygen - это существенно меняет смысл программы!
Ниже приведены явные определения экземпляров :
template void FileReader::Read<uint8_t>( uint8_t * );
template void FileReader::Read<uint16_t>( uint16_t * );
Они говорят компилятору создавать экземпляр шаблона функции прямо там и тогда и генерировать символы для экземпляров, чтобы они могли быть связаны с другим модулем перевода. Похоже, это то, что вы на самом деле пытаетесь сделать.
Ниже приведены явные объявления специализации :
template<> void FileReader::Read<uint8_t>( uint8_t * );
template<> void FileReader::Read<uint16_t>( uint16_t * );
Они сообщают компилятору, что вы собираетесь определить свои собственные специализации шаблона для этих конкретных аргументов шаблона. Таким образом, любой, кто пытается вызвать FileReader::Read<uint8_t>
, НЕ будет создавать экземпляр первичного шаблона, который вы уже определили, а искать специальное определение. Не похоже, что это то, что вы пытаетесь сделать, но если бы это было так, вам бы действительно пришлось определить эти специализации в какой-то момент.