Тип, используемый в качестве аргумента шаблона, должен предоставить всем членам, которые используются шаблоном
Тип, используемый в качестве аргумента шаблона, должен предоставить всем членам, которые используются шаблоном.
Шаблон может задать операции на типовом типе через одну или несколько переменных члена или функций членства. Если тип, который вы используете, чтобы инстанцировать шаблона, не предоставляет всем членам, которые использует шаблон, ваша программа может быть плохо сформирована и может содержать синтаксис или семантические ошибки.
Например, в следующем коде, шаблоне TmplClass
объявляет функцию членства someProperty()
но введите myType
не делает. Инстанцирование TmplClass
при помощи myType
несовместимо и, в результате недостающего someProperty()
функция, inst.func();
вызывает ошибку компиляции.
template <typename T> class TmplClass { public: void func() { T t; t.someProperty(); } }; struct myType { }; void Instance() noexcept { TmplClass<myType> inst; //Non-compliant // inst.func(); //compilation error, struct myType has no member function someProperty() }
Polyspace® флаги class
Struct ()
, или union
обработайте инстанцирования по шаблону, когда параметр шаблона не содержит все члены, которые использует шаблон.
Если вы рассматриваете результаты в рабочем столе Polyspace или веб-интерфейсах в определении шаблона, программное обеспечение подсвечивает члены, которые отсутствуют в параметре шаблона.
Polyspace не отмечает:
Инстанцирования шаблона функции.
Обработайте по шаблону инстанцирования, которые используют неполный тип в качестве параметра шаблона.
Обработайте по шаблону инстанцирования, которые используют параметр шаблона, где недостающий член является типом элемента (вложенный тип) или шаблон члена.
Если вы ожидаете нарушение правила, но не видите его, относитесь, чтобы Диагностировать, Почему Кодирующие Стандартные Нарушения Не Появляются как ожидалось.
Группа: шаблоны |
Категория: необходимый, автоматизированный |