基于非 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);
}
这是我要简化的函数:
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);
}