我正在移植一個ComputerVision項目到OpenFrameworks現在和它的一部分是模擬庫的一些小部分,爲此我正在編寫我自己的,更輕量級的輔助類。如何定義使用模板類的模板函數,但沒有該類的所有參數?
我有向量和矩陣爲此我使用OpenCV的類cv::Vec
和cv::Matx
。它們是一些功能很少的簡單容器,但大多數情況下很好。
我嘗試模擬的功能是切片功能。基本上取一行Matrix並返回一個Vector,或者取一個矢量的子集並返回那個較小的矢量。現在,我有這樣的事情:
template<typename Precision, int Start, int Length, int X>
cv::Vec<Precision, Length> slice(cv::Vec<Precision, X> v)
{
assert(Start >= 0);
assert((Start+Length) <= X);
cv::Vec<Precision, Length> temp;
for (int i = 0; i < Length; i++)
temp[i] = v[Start+i];
return temp;
}
而且我會像這樣使用:
cv::Vec<double, 3> newVector = ImpUtil::slice<double, 3, 3, VectorLength>(vector);
cv::Vec
沒有一個成員告訴你長期是這樣,所以我必須在經過長無論如何現在。這就是爲什麼我打算在某個時候寫出自己的課程的原因之一。
問題是我正在使用使用模板類的模板函數。然而,整個功能的一部分純粹是針對班級的,我想知道是否可以以某種方式放棄它(是的,這意味着現在放棄'斷言')。該函數應該適用於任何長度的向量,並且除了assert(我可以從某個點的向量獲得)之外,它在函數中沒有用處。
您沒有按照它應該使用的方式使用'cv :: Vec'。使用'std :: vector'或者'std :: array' – Miki
我不能說我正確地使用了'cv :: Vec'('cv ::'有幾個Vector類),但是'std ::矢量「絕對是另一回事。我需要使用點和跨產品的數學結構,而不是數組。 –
那麼爲什麼不用一個單行/列使用'cv :: Mat'呢?在我看來,你是過於複雜的東西 – Miki