我正在重构大量代码,需要向许多函数添加一个额外的参数,该参数将始终具有该对象成员的值。类似于:
class MyClass
{
public:
CMyObject A,B;
void MyFunc(CMyObject &Object);
// used to be void MyFunc();
};
现在,我实际上希望它读取
class MyClass
{
public:
CMyObject A,B;
void MyFunc(CMyObject &Object = A);
};
但是我不允许有一个默认参数是非静态成员。我已经阅读了这个类似的问题,它指出这是不可能的,但我想知道是否有任何合理的解决方法。因为95%的时间将使用默认参数,因此使用默认参数会大大减少我必须更改的代码量。到目前为止,我最好的解决方案是像下面这样:
class MyClass
{
public:
CMyObject A,B;
void MyFunc(BOOL IsA = TRUE);
};
void MyClass::MyFunc(BOOL IsA)
{
CMyObject &Object = A;
if (!IsA)
Object = &B;
}
这种方法不够优雅,但是我是否错过了更好的方法?
编辑:值得一提的是,额外参数的原因是将一些与对象相关的状态成员外部化,以帮助多线程。