我正在重构大量代码,其中我必须向多个函数中添加一个额外的参数,这些参数将始终具有该对象的成员值。就像是

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);
};

但不允许我使用非静态成员的默认参数。我读过this similar question,这表明这是不可能的,但我想知道是否有任何合理的解决方法。原因是95%的时间将使用默认参数,因此使用默认参数将极大地减少我必须更改的代码量。到目前为止,我最好的解决方案是这样的;
class MyClass
{
public:
   CMyObject A,B;

   void MyFunc(BOOL IsA = TRUE);
};

void MyClass::MyFunc(BOOL IsA)
{
    CMyObject &Object = A;
    if (!IsA)
        Object = &B;
}

这还不算精妙,但是有没有更好的方法可以做到呢?

编辑: FWIW,使用额外参数的原因是要从相关对象中外部化一些与状态相关的成员,以帮助进行多线程处理。

最佳答案

怎么样 :

class MyClass
{
public:
   CMyObject A,B;

   void MyFunc()
   {
     MyFunc(A);
   }
   void MyFunc(CMyObject &Object);
};

07-24 14:25