我有一些可以在2或3维中运行的代码。这是在编译时通过宏设置的。但是,以下原因导致本征出现问题:
// Assume two vectors exist a and b
if (dimensions == 3) {
a.cross(b);
}
在二维中,叉积会跳出Eigen的静态断言,即使该代码永远不会真正运行。
我该如何解决?如果可能的话,我想避免使用更多的宏。
答案 0 :(得分:1)
您不能直接这样做,因为编译器应该能够为所有分支生成代码,无论它们是否在运行时实际使用。如果可以访问C ++ 17编译器,并且dimension
是constexpr
,则可以使用if constexpr
:
template<int dimension>
void foo()
{
...
if constexpr (dimension == 3) {
a.cross(b);
}
...
}
如果您的编译器不支持if constexpr
,则可以使用标签分派来模仿它。