При объявлении шаблонов функций используется конечный синтаксис типа возврата, если тип возврата зависит от типа параметров
При объявлении шаблонов функций используется конечный синтаксис типа возврата, если тип возврата зависит от типа параметров.
Когда тип возврата шаблона зависит от типов параметров, использование конечного синтаксиса типа возврата значительно улучшает читаемость кода.
Например, для неклассовых определений методов использование конечного синтаксиса типа возврата означает, что вы не должны использовать полный тип возврата функции наряду с typename
ключевое слово. Вместо явного определения полного типа возврата для aMethod
в этом примере:
template <typename T> class aClass { public: using vectorType = std::vector<T>; vectorType aMethod(T const&); }; //Difficult-to-read method definition //Part in bold indicates fully qualified return type of method template <typename T> typename aClass<T>::vectorType aClass<T>::aMethod(T const &) { };
template <typename T> class aClass { public: using vectorType = std::vector<T>; vectorType aMethod(T const&); }; template <typename T> auto aClass<T>::aMethod(T const &) -> vectorType { };
Объявления шаблона функции контроля, где явно заданный тип возврата функции шаблона имеет те же возможности, что и сама функция шаблона.
Для образца в предыдущем примере функция aMethod
имеет тип возврата vectorType
, который имеет те же возможности, что и aMethod
, а именно, класс aClass<T>
. Вместо явного определения полного типа возврата можно использовать конечный синтаксис типа возврата.
Поскольку C++ 14 включил удержание типа возврата, можно использовать auto
ключевое слово для объявления типовых шаблонов с одновременным опусканием конечного типа возврата. В таких случаях Polyspace® не поднимает нарушение.
Если вы ожидаете нарушения правил, но не видите его, обратитесь к разделу «Стандартные нарушения кодирования не отображаются».
Группа: Деклараторы |
Категория: Необходимый, Автоматизированный |