C++库类的重载赋值运算符
C++ overload assignment operator of a library class
我需要将 cv::Mat 分配给 cv::P oint3d
cv::Point3d pt;
cv::Mat mat(3, 1, CV_64F);
pt = mat;
我尝试以两种不同的方式做到这一点。第一次尝试如下:
template<typename _Tp>
inline cv::Point3_<_Tp> & cv::Point3_<_Tp>::operator = (const cv::Mat & mat){ ... }
但它提供了以下编译错误:
Out-of-line definition of 'operator=' does not match any declaration in 'Point3_<_Tp>'
我也尝试了这个不同的解决方案:
template<typename _Tp>
inline cv::Mat::operator cv::Point3_<_Tp>() const { }
但是,编译器不喜欢它,并提供以下错误:
Out-of-line definition of 'operator Point3_<type-parameter-0-0>' does not match any declaration in 'cv::Mat'
我错过了什么?
不能在
类定义之外定义赋值或转换运算符。他们必须是班级的成员。
你可以做的是提供你自己的包装类,它允许这样的赋值。像这样:
namespace mycv
{
class Point3d
{
public:
template <typename... Args>
Point3d(Args&& ... args)
: value(std::forward(args)...)
{}
Point3d& operator=(cv::Mat const& mat)
{
// do your stuff;
return *this;
}
operator cv::Point3d() const
{
return value;
}
private:
cv::Point3d value;
};
}
int main(int argc, const char* argv[])
{
mycv::Point3d pt;
cv::Mat mat;
pt = mat;
}
相关文章:
- 为什么初始化时没有调用重载赋值运算符?
- 在类外重载赋值运算符
- 重载赋值运算符函数和复制构造函数中的错误
- 为多个签名使用相同的代码重载赋值运算符?
- 错误消息:使用复制构造函数和重载赋值运算符
- 类模板中的重载赋值运算符
- C++库类的重载赋值运算符
- 为什么为单个赋值操作调用复制构造函数和重载赋值运算符
- 如何重载赋值运算符以满足 ob1=ob2=ob3(ob1,ob2,ob3 是同一类的对象)
- 带有非类型参数的C++模板类:如何重载赋值运算符
- C++重载赋值运算符在不相关的类中被调用
- C++重载赋值运算符声明中做什么?
- 在c++中操作重载赋值运算符
- 如何避免重载赋值运算符将右值转换为左值
- 重载赋值运算符的问题
- 复制构造函数、重载赋值运算符和deepCopy
- 重载赋值运算符带下标运算符
- 如何在不重载赋值运算符的情况下运行此代码
- 重载赋值运算符 - 多态容器
- 如何重载赋值运算符以允许我的类等于基元类型,例如'int'