我正在写几个函数需要输入一个模板函数的结果宏展开:使用模板
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:'(因为在真正的代码中函数被调用很多次)' –