OpenCVを使っていて嵌ったのでメモ。
cv::Matはスマートなメモリ管理が実装されているので、
cv::InputArrayも同じかと思ってたら痛い目を見た。
cv::Matの例
スマートなメモリ管理のおかげで、
func1実行時にcv::Mat::eye(3,3,CV_64FC1)が期待通り出力されている。
std::function<void(void)> func1; std::function<void(const cv::Mat&)> func2 = ( [&]( const cv::Mat& src ) { func1 = ([=](){ std::cout << src << std::endl; } ); } ); func2( cv::Mat::eye(3,3,CV_64FC1) ); func1();
出力結果
[1, 0, 0; 0, 1, 0; 0, 0, 1]
cv::InputArrayの例
上記「cv::Matの例」と同じ出力結果になることを期待したけど、
残念ながらそうはならなかった。
std::function<void(void)> func1; std::function<void(cv::InputArray)> func2 = ( [&]( cv::InputArray src ) { func1 = ([=](){ std::cout << src.getMat() << std::endl; } ); } ); func2( cv::Mat::eye(3,3,CV_64FC1) ); func1();
出力結果
[]