Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenCV:检查cv::Point是否已设置值_C++_Opencv - Fatal编程技术网

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;
   // ...
}