![](/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.