【发布时间】:2017-12-04 12:23:48
【问题描述】:
我正在使用 OpenCV,但我不喜欢以下输出:
std::cout << matrix << std::endl; 当矩阵的类型为cv::Mat。
是否可以在不修改类代码的情况下重新定义运算符<<对现有类的对象的影响?
我知道我可以编写一个简单的函数,从 cv::Mat 中生成一个字符串,但结果可读性较差(我认为),而且我是 C++ 的初学者,所以我可能错过了一些东西。
我找到了this SO question,所以我尝试了:
#include <iostream>
#include <string>
#include <opencv2/opencv.hpp>
std::ostream& operator<<(std::ostream& os, const cv::Mat& mat)
{
os << "test";
return os;
}
int main(int argc, char** argv)
{
cv::Mat m(2,2, CV_8UC3, cv::Scalar(0,0,255));
std::cout << m << std::endl;
}
但我得到了:
main.cpp:14:18: 错误:'std::cout
编辑:我不认为它是 this question 的副本,因为我无法访问库的代码(OpenCV 是开源的,所以理论上我可以修改它,但那会是个坏主意:更难维护、重新分发我的代码等)。
【问题讨论】:
-
如果对象已经定义了非成员函数,则不能重新定义它。
-
@Javia1492 我添加了一个编辑来解释为什么我认为它不是重复的
-
这不行,你可以创建一个函数,做同样的事情,但是一旦定义了就不能重新定义了。
标签: c++ opencv iostream cout redefinition