![](/img/trans.png)
[英]How to check if a template parameter in a function matches a specialization of a given type alias
[英]How to check if given parameter is cv::noArray()?
我想实现一个将图像作为可选参数的函数。 如果传递了图像,我想使用它 - 否则我想计算一个默认值。 在 OpenCV 库中cv::noArray()
用于此目的。 像这样的东西:
void doStuff(cv::InputArray candidatesMap = cv::noArray())
{
// initialize candidatesMap if not given
if(candidatesMap is cv::noArray()) // <-- Need help here
{
candidatesMap = createCandidatesMap();
}
// ... more code using candidatesMap
}
如何以编程方式检查可选参数是否已给出或默认为cv::noArray()
。
由于我没有找到任何文档,它可能对其他人也有帮助。
您可以执行以下操作来检查cv::InputArray
已分配给cv::noArray()
:
void doStuff(cv::InputOutputArray candidatesMap = cv::noArray())
{
// initialize candidatesMap if not given
if(candidatesMap.empty())
{
candidatesMap = createCandidatesMap();
}
// ... more code using candidatesMap
}
我已经检查了 OpenCV 代码中cv::noArray()
的用法,并且有这样的东西:
if (&argument == &noArray())
return "InputArrayOfArrays: noArray()";
在你的情况下,它可能是:
void doStuff(cv::InputArray candidatesMap = cv::noArray())
{
// initialize candidatesMap if not given
if(&candidatesMap == &cv::noArray())
{
candidatesMap = createCandidatesMap();
}
// ... more code using candidatesMap
}
但即使candidatesMap
不等于noArray
这并不意味着此输入不为空。 所以也值得检查它的大小。
@MichałWalenciak 说这种比较是行不通的。 所以你可以通过其他方式检查它。 要检查candidatesMap
是否有效,您可以调用candidatesMap.getObj()
并检查该指针是否有效。
我知道它不能回答您的问题,但是您可以通过编写更简洁的代码来解决您的问题。 只写两个函数。 一种有参数,一种没有。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.