在哪里可以找到通用 C++ 模板的参数要求?

Where to find requirement on the parameters of a general c++ template?

我试着了解如何使用模板,比如

itk::ImageToImageFilter< TInputImage, TOutputImage > Class Template Reference

如此处所述:https://itk.org/Doxygen/html/classitk_1_1ImageToImageFilter.html

文档好像没有说TInputImage或者TOutputImage的限制;代码 API 也没有。似乎两者可以是从"int"、"double"到任何一种用户定义的类。这很奇怪。我怎么知道模板参数的要求?

实际上文档中有关于它可能是什么的信息。它不能是 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 是否具有上面指出的类型或类型定义。是的,没有概念,因此,只有文档(或编译器)可以回答对模板类型应用了哪些限制的问题。

如果您只是想了解模板,那真的不是您应该关注的库。从文档中我可以说,它的模板很重。

简单的例子就是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

您不能使用没有 difference_typevalue_typepointerreferenceiterator_category 的类型构造实例化 iterator_traits这将是编译错误。但是,您可以使用 std::vector<int>::iterator 实例化它,因为它具有所有这些类型。

itk::ImageToImageFilter 是图像过滤器(对图像进行运算并生成图像作为输出的计算)的抽象基础 class。它旨在与 itk::Image 一起用作输入和输出。大多数具体过滤器对输入和输出模板类型(维度、像素类型浮点或整数等)的可能变化进行了一些限制。

一般来说,如果您想学习如何使用库,阅读它的 documentation 是一个很好的起点。