我正在编写几个函数,它们将模板函数的结果作为输入:
int alg1(Vect3) {...}
...
int algN(Vect3) {...}
void main() {
alg1( mat.topRightCorner<3,1>() )
}
其中,如果您很好奇,则topRightCorner
返回 的子矩阵,这是Eigenmat
中的一个方法,当在编译时已知时,维度将作为模板参数放置在其中。
但是使用宏创建“快捷方式”以在不同算法之间快速切换(因为在实际代码中该函数被多次调用),就像这样
#define ALG(X) ( algN(X) )
ALG( mat.topRightCorner<3,1>() )
给出一个错误,因为宏被正确扩展但不知何故被误解为具有两个不同的参数,mat.topRightCorner<3
并且1>()
.
用方括号包裹输入就可以了,但是为什么会出现这种行为呢?