c++ - 在哪里可以找到对通用 c++ 模板参数的要求?
问题描述
我尝试了解如何使用模板,例如
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
具有上面指出的类型或 typedef。没有概念是的,因此,只有文档(或编译器)可以回答对模板类型应用了哪些限制的问题。
如果你只是想理解模板,那真的不是你应该看的库。从文档中我可以说,它是大量模板化的。
简单的例子是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
,这将是编译错误。但是,您可以使用 example 实例化它std::vector<int>::iterator
,因为它具有所有这些类型。
推荐阅读
- karma-jasmine - Karma - 父组件规范文件中子组件的模拟属性
- android - 在 Google Play 商店上传 App Bundle (aab) 时收到以下警告
- excel - Vlookup 中的嵌套 Concat 函数不起作用,似乎找不到语法错误
- rest - SSL 证书与 JWT
- tensorflow - 在 Tensorflow Deeplab 上评估不同尺寸的图像
- python-2.7 - 如何将 Python 'None' 类型转换为 'NULL' 类型
- python - Jupyter - 合并 2 个具有相同 x 轴的图
- java - 如何获取我连接的路由器的 IP 地址
- reactjs - 从 API 中提取数据
- github - SSRS 与 GitHub 的集成