在哪里可以找到通用 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_type
、value_type
、pointer
、reference
、iterator_category
的类型构造实例化 iterator_traits
这将是编译错误。但是,您可以使用 std::vector<int>::iterator
实例化它,因为它具有所有这些类型。
itk::ImageToImageFilter
是图像过滤器(对图像进行运算并生成图像作为输出的计算)的抽象基础 class。它旨在与 itk::Image
一起用作输入和输出。大多数具体过滤器对输入和输出模板类型(维度、像素类型浮点或整数等)的可能变化进行了一些限制。
一般来说,如果您想学习如何使用库,阅读它的 documentation 是一个很好的起点。
我试着了解如何使用模板,比如
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_type
、value_type
、pointer
、reference
、iterator_category
的类型构造实例化 iterator_traits
这将是编译错误。但是,您可以使用 std::vector<int>::iterator
实例化它,因为它具有所有这些类型。
itk::ImageToImageFilter
是图像过滤器(对图像进行运算并生成图像作为输出的计算)的抽象基础 class。它旨在与 itk::Image
一起用作输入和输出。大多数具体过滤器对输入和输出模板类型(维度、像素类型浮点或整数等)的可能变化进行了一些限制。
一般来说,如果您想学习如何使用库,阅读它的 documentation 是一个很好的起点。