не найден однозначно соответствующий член класса для экземпляра шаблона - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть класс с шаблонной функцией. Функция является специализированной / инстанцированной, поэтому ее можно определить в cpp. Doxygen дает мне ошибку по поводу создания шаблона.

Например, мой .h:

namespace LP
{
    namespace LF
    {
        class FileReader
        {
        public:
            template <class T> void Read( T *aValue );
            size_t Read( uint8_t *aBuffer, size_t aSizeToRead );
        };
    }
}

И мой cpp:

/// Valid doxygen function doc
template<class T>
void
LP::LF::FileReader::Read( T *aValue )
{
    Read( reinterpret_cast<uint8_t *>( aValue ), sizeof( T ) );
}

//Template specialisation so it can be defined in the cpp file
template void LP::LF::FileReader::Read<uint8_t>( uint8_t * );
template void LP::LF::FileReader::Read<uint16_t>( uint16_t * );
template void LP::LF::FileReader::Read<uint32_t>( uint32_t * );

Я получил эту ошибку для всех 3 строк специализации:

warning: no uniquely matching class member found for 
  template void LP::LF::FileReader::Read< uint8_t >(uint8_t *)
Possible candidates:
  'template < T >
  void LP::LF::FileReader::Read(T *aValue)' at line 48 of file FileReader.h
  size_t LP::LF::FileReader::Read(uint8_t *aBuffer, size_t aSizeToRead)' at line 49 of file FileReader.h

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

Специализация не требует документирования, универсальная функция уже задокументирована

дооксиген 1,8,13

Спасибо

РЕДАКТИРОВАТЬ: изменение названия на специализацию из специализации

1 Ответ

0 голосов
/ 15 ноября 2018

Не найден правильный синтаксис, но есть обходной путь:

/// \relates LP::LF::FileReader
template void LP::LF::FileReader::Read<uint8_t>( uint8_t * );

Не знаю почему, но это заставляет замолчать предупреждение

...