我想用C ++编写一个将矩阵作为可选参数的函数。如果用户最终在调用函数时传递矩阵,则该矩阵将被函数修改,因此我正在实现按引用传递。
根据先前问题的公认答案,可以通过将默认值设置为空Mat来完成,例如:
void foo(..., cv::Mat &matrix = cv::Mat()) {
// code
return;
}
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试在OpenCV 3.2中进行编译时,从类型为'cv :: Mat'的右值中得到«无效的初始化类型'cv :: Mat&'的非常量引用»错误。
自OpenCV 2.4起,此功能是否已更改,或者问题可能出在其他地方?
小智 5
我可能是错的,因为我是这些问题的初学者,但这就是我的想法。您要通过ref传递一个可选参数。问题是带有符号&的引用是对l值的引用,而l值是存在的对象。C ++不允许您编写内容,因为它matrix
是一个r值,即一个临时对象,没有关联的实际内存地址。您唯一可以通过的方法cv::Mat &matrix = cv::Mat()
是通过构造它,const cv::Mat &matrix = cv::Mat()
这当然不是您所需要的。
恕我直言,最简单的解决方案是只重载您的函数定义,以便您
void foo(...args);
void foo(...args, cv::Mat &matrix);
希望能帮助到你