基于非 const bool 分支出模板代码

Branching out templated code based on a non const bool

这是我要简化的函数:

void BaseCharacter::ClimbLadder(float AxisValue)
{
    if (AxisValue > 0.f)
        ClimbUpLadder<bIsClimbingLaddersFast>();
    else if (AxisValue < 0.f)
        ClimbDownLadder<bIsClimbingLaddersFast>();
}

bIsClimbingLaddersFast 是布尔成员变量。现在,代码无法编译,因为需要在编译时知道布尔值。这是简单的解决方案:

void BaseCharacter::ClimbLadder(float AxisValue)
{
    if (bIsClimbingLaddersFast)
    {
        if (AxisValue > 0.f)
            ClimbUpLadder<true>();
        else if (AxisValue < 0.f)
            ClimbDownLadder<true>();
    }
    else
    {
        if (AxisValue > 0.f)
            ClimbUpLadder<false>();
        else if (AxisValue < 0.f)
            ClimbDownLadder<false>();
    }
}

但我想知道是否有更简洁的方法来编写此代码,一种没有重复的 if-else 语句的方法。 正在使用 C++14。

一个可能的(完全未经测试的代码)解决方案。

template<bool climb>
void BaseCharacter::ClimbLadder(float AxisValue) {
    if (AxisValue > 0.f)
        ClimbUpLadder<climb>();
    else if (AxisValue < 0.f)
        ClimbDownLadder<climb>();
}

void BaseCharacter::ClimbLadder(float AxisValue) {
    if (bIsClimbingLaddersFast)
        ClimbLadder<true>(AxisValue);
    else
        ClimbLadder<false>(AxisValue);
}