C++ OpenCV:检查cv::Point是否已设置值
我想写一个类似下面的程序:C++ OpenCV:检查cv::Point是否已设置值,c++,opencv,C++,Opencv,我想写一个类似下面的程序: cv::Point keyPoint keyPoint = outputOfFunction(); // Return value is not set to anything if no valid results. if( //keyPoint was set by the function above... ){ // Do something with this value else{ // Do nothing } 但是,cv::Point没有类
cv::Point keyPoint
keyPoint = outputOfFunction(); // Return value is not set to anything if no valid results.
if( //keyPoint was set by the function above... ){
// Do something with this value
else{
// Do nothing
}
但是,cv::Point没有类似于empty()的成员函数
实现上述目标的最佳方式是什么
如果OutputOfffunction()没有有效的结果,我并不希望它返回一个点。。。这样做似乎有点笨拙。有几种选择。一个选项是如Rollen D'Souza在评论中建议的那样,返回一个
bool
并通过引用传递一个cv::Point
在某些情况下,某些返回值在特定域中可能无效。例如,假设您的
cv::Point
必须是图像中的有效坐标,即坐标必须为正(且小于宽度/高度)。在这些情况下,您可以返回此类无效值以指示失败,例如,cv::Point(-1,-1)
可能选项的摘要:
1) 通过引用传递并在值有效时返回bool
bool f(cv::Point &p);
2) 失败时返回一些固定值,如cv::Point(-1,1)
3) 返回boost::可选:
boost::optional<cv::Point> f();
auto might_be_point = f();
if (might_be_point.is_initalized())
cv::Point point = might_be_point.get();
一般来说,我会建议3)或4)。如果你这样设计
outputOfFunction()
(假设它是你的),那么无论如何都必须创建一个点。您是否控制输出关闭功能?如果是这样,为什么不使用这样的签名:bool outputofffunction(cv::Point&)
如果一切顺利,在该函数中设置传入的变量。如果一切都很好,你会返回真的。这真的很好,谢谢你!(我对编程比较陌生)。一个问题是,编码这样的代码会使代码难以理解其他人吗?在C++中,这种格式的功能在API中很常见。WindowsAPI是一个很好的例子,但还有很多其他的例子。这并不难阅读。谢谢你的建议=]哇,非常详细,这真的很有帮助。谢谢
class my_logic_exception: public std::exception { }
cv::Point f() {
if (sth_goes_wrong)
throw my_logic_exception;
// ...
}