解决本征静态断言

时间:2018-08-14 06:04:18

标签: c++ eigen

我有一些可以在2或3维中运行的代码。这是在编译时通过宏设置的。但是,以下原因导致本征出现问题:

// Assume two vectors exist a and b
if (dimensions == 3) {
    a.cross(b);
}

在二维中,叉积会跳出Eigen的静态断言,即使该代码永远不会真正运行。

我该如何解决?如果可能的话,我想避免使用更多的宏。

1 个答案:

答案 0 :(得分:1)

您不能直接这样做,因为编译器应该能够为所有分支生成代码,无论它们是否在运行时实际使用。如果可以访问C ++ 17编译器,并且dimensionconstexpr,则可以使用if constexpr

template<int dimension>
void foo()
{
    ...
    if constexpr (dimension == 3) {
        a.cross(b);
    }
    ...
}

如果您的编译器不支持if constexpr,则可以使用标签分派来模仿它。