На самом деле в документации есть информация о том, что это может быть. И это не может быть int, double или что-то еще.
using InputImageConstPointer = typename InputImageType::ConstPointer
using InputImagePixelType = typename InputImageType::PixelType
using InputImagePointer = typename InputImageType::Pointer
using InputImageRegionType = typename InputImageType::RegionType
using InputImageType = TInputImage
Таким образом, TInputImage
должно иметь как минимум несколько типов. То же самое для TOutputImage
.
Компилятор проверит, что TInputImage
имеет типы или typedefs, которые указаны выше. Понятий нет, да, так что только документация (или компилятор) может ответить на вопрос, какие ограничения применяются к шаблонному типу.
И если вы просто пытаетесь понять шаблоны, то это действительно не библиотека, которую вам следует смотреть. Из документации я могу сказать, что это тяжелый шаблон.
Простым примером будет std :: iterator_traits . Он имеет
Member types
Member type Definition
difference_type Iter::difference_type
value_type Iter::value_type
pointer Iter::pointer
reference Iter::reference
iterator_category Iter::iterator_category
Вы не можете создать экземпляр iterator_traits
с типом, который не имеет difference_type
, value_type
, pointer
, reference
, iterator_category
, это будет ошибка компиляции. Однако вы можете создать его, например, с помощью std::vector<int>::iterator
, потому что он имеет все эти типы.