void setSelected( bool selected )
{
a = selected? SELECTED_VALUE_A: DEFAULT_VALUE_A;
b = selected? SELECTED_VALUE_B: DEFAULT_VALUE_B;
c = selected? SELECTED_VALUE_C: DEFAULT_VALUE_C;
}
if
和temporaries
的示例。void setSelected( bool selected )
{
a = DEFAULT_VALUE_A;
b = DEFAULT_VALUE_B;
c = DEFAULT_VALUE_C;
if ( selected )
{
a = SELECTED_VALUE_A;
b = SELECTED_VALUE_B;
c = SELECTED_VALUE_C;
}
}
void setLook( int nA, float nB, std::string nC )
{
a = nA;
b = nB;
c = nC;
}
void setSelected( bool selected )
{
if ( selected )
setLook( DEFAULT_VALUE_A, DEFAULT_VALUE_B, DEFAULT_VALUE_C );
else
setLook( SELECTED_VALUE_A, SELECTED_VALUE_B, SELECTED_VALUE_C );
}
setLook
void setLookSelected()
{
setLook( SELECTED_VALUE_A, SELECTED_VALUE_B, SELECTED_VALUE_C );
}
void setLookNormal()
{
setLook( DEFAULT_VALUE_A, DEFAULT_VALUE_B, DEFAULT_VALUE_C );
}
void setSelectedAF( bool selected )
{
if ( selected )
setLookSelected();
else
setLookNormal();
}
//Or just call
setLookSelected();
setLookNormal();
让我们简化要求:
如果
a
为真,则将变量c
设为b
,否则设为d
a = b ? c : d;
恕我直言,尽可能清楚
a = c;
if (b)
a = d;
真的很难看你将c
分配给a
,即使!b
。除了糟糕的可读性之外,您还会遇到性能下降,因为您有双重任务。优化器可以处理这个问题,但不要指望它。
void setA(T x)
{
a = x;
}
//....
if (b)
setA(c);
else
setA(d);
如果您要设置许多成员,这可能很有用。代码维护性将得到改善。如果您想要不同的功能,您只需要在一个地方进行更改。不错!
void setAC()
{
a = c;
}
void setAD()
{
a = d;
}
//...
if (b)
setAC();
else
setAD();
我建议的另一种选择。如果您不想在将来仅检查b
怎么办?如果这两个变体不是唯一的,即你想将ID_NODE_GLOW_SELECT
和ID_NODE_COLOR_NORMAL
结合起来用于其他条件怎么办?
结论:我将第一个变量用于简单的小案例,并使用带有大型类参数的函数,您可以在其中设置大量成员。我肯定会远离选项2和4。
如果答案不清晰明显,有时候这意味着你提出了错误的问题。
扫描您的代码,我怀疑有两个设计更改,这是一个好主意:
sprite_style
类中。这样,您可以为各种样式制作一些命名常量,然后您可以使用一个简单的set_style
函数调用来更改样式。sprite
类 - 让sprite
类成为精灵所需的基本内容。将此样式切换到子类中,或者甚至更好地将其移动到在状态更改时触发的事件处理程序中。