我使用的OpenCV的輸出流並我不喜歡的輸出中:C++重新定義現有的類
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: error: ambiguous overload for ‘operator<<’ in ‘std::cout << m’
編輯:我不認爲這是this question重複,因爲我沒有訪問該庫的代碼(OpenCV是開源的,所以我可以理論上修改它,但這是一個壞主意:更難以維護,重新分配我的代碼等)。
如果該對象已定義你不能重新定義它非meber功能。 – NathanOliver
[如何正確重載ostream的<<運算符?](https://stackoverflow.com/questions/476272/how-to-properly-overload-the-operator-for-an-ostream) – Javia1492
@ Javia1492我已經添加了一個編輯來解釋爲什麼我認爲它不是重複的 –