我正在寫幾個函數需要輸入一個模板函數的結果宏展開:使用模板
int alg1(Vect3) {...}
...
int algN(Vect3) {...}
void main() {
alg1(mat.topRightCorner<3,1>())
}
的地方,如果你很好奇,topRightCorner
返回mat
子矩陣,從Eigen的方法,在編譯時已知維度作爲模板參數放置。
然而創建「快捷方式」使用宏不同算法之間快速切換(因爲在實際的代碼的功能被調用多次),像這樣
#define ALG(X) (algN(X))
ALG(mat.topRightCorner<3,1>())
給出了一個錯誤,因爲宏是正確展開,但以某種方式誤解爲兩個不同的參數,mat.topRightCorner<3
和1>()
。
使用方括號包裝輸入將做到這一點,但爲什麼這種行爲?
@WhozCraig:'(因爲在真正的代碼中函數被調用很多次)' –