我正在编写几个函数,它们的输入是模板函数的结果:
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>()
。
用括号将输入包装起来就会解决问题,但为什么会出现这种情况呢?
(因为在实际代码中该函数被调用多次)
- Lightness Races in Orbit