在查看使用begin()方法的opencv参考手册时,我提出了以下声明:
template<typename _Tp> MatIterator_<_Tp> Mat::begin()
我不是很擅长C ++,我只是想知道“MatIterator”是什么以及整个使用“_”是什么? (它在C ++中有什么特殊含义)
答案 0 :(得分:1)
C ++中下划线附加的唯一特殊含义是,_Tp
等带有下划线,后跟另一个下划线或大写字母的名称将保留用于实现。
尾随下划线(如MatIterator_
)通常用于表示班级成员。
从事物的外观来看,MatIterator_
是一种类型,显然用作矩阵上的迭代器。
关于整个声明,它看起来像:
“template”“&lt;” 模板参数“&gt;” return-type * function-name *“(” function-parameters “)”
其中:
template-parameter 是class
或typename
后跟任意名称(它也可以是非类型模板参数或模板模板参数,但我们不会进入它们,因为这段代码没有使用)。实例化模板时,此名称将表示实例化的类型。
return-type 只是某种类型,它将是函数返回的类型。在这种情况下,它取决于模板参数,因此它表示“对于某些类型_Tp
,这将返回一个名为MatIterator<_Tp>
”的类型。
function-name 只是您定义的函数的名称。在这种情况下,它是一个成员函数,因此它的形式为“class-name :: member-name”。
在这种情况下,函数参数是空的,所以我们也不会进入它。