如何理解C++;这个代码行的语法? 和I运算符IPLIGIVENE()/COD>的含义是什么,在C++语法中似乎不熟悉。 Mat I; Ptr<IplImage> piI = &I.operator IplImage(); mati; Ptr piI=&I.operator IplImage();
这个 调用转换运算符,将如何理解C++;这个代码行的语法? 和I运算符IPLIGIVENE()/COD>的含义是什么,在C++语法中似乎不熟悉。 Mat I; Ptr<IplImage> piI = &I.operator IplImage(); mati; Ptr piI=&I.operator IplImage();,c++,opencv,C++,Opencv,这个 调用转换运算符,将Mat类型的对象转换为IplImage类型的对象 这个表达式呢 &I.operator IplImage() 表示转换对象的地址 但是,似乎不应该编译代码,因为运算符&应用于转换运算符函数运算符IplImage()返回的类型为IplImage()的临时对象。“运算符IplImage”实际上是类型转换运算符的全名。因此,“I.operator IplImage()”将I从Mat类型转换为IplImage类型。最后,piI指向生成的IplImage的地址。这相当于:
Mat
类型的对象转换为IplImage
类型的对象
这个表达式呢
&I.operator IplImage()
表示转换对象的地址
但是,似乎不应该编译代码,因为运算符&应用于转换运算符函数运算符IplImage()返回的类型为IplImage()的临时对象。“运算符IplImage”实际上是类型转换运算符的全名。因此,“I.operator IplImage()”将I从Mat类型转换为IplImage类型。最后,piI指向生成的IplImage的地址。这相当于:
Ptr<IplImage> piI = &static_cast<IplImage>(I);
Ptr-piI=&static_-cast(I);
我不是OpenCV的用户,但我可以向您概述代码的作用:
mati代码>
创建一个名为I
的Mat
对象
让我们把下一条线切掉:
Ptr-piI
似乎是IplImage
的智能指针
&I.operator IplImage()
通过获取地址将Mat
对象转换为IplImage
对象。在I
上,调用operator IplImage()
(强制转换为IplImage
),获取结果的地址,并从中构造一个Ptr
。除了当前的问题,避免任何有缺陷的东西。他们早在2010年就废除了神秘的c-api,你也应该废除。谢谢!很清楚。我在Mat类中找到了一个函数:操作符IplImage()const;另一个问题,thsi转换的实现应该由Mat类而不是IplImage类定义,我说的对吗?@4Simplity。
Ptr<IplImage> piI = &static_cast<IplImage>(I);