非静态成员作为C++中的默认参数

Sma*_*acL 15 c++ default-value non-static

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

class MyClass
{
public:
   CMyObject A,B;

   void MyFunc(CMyObject &Object);
   // used to be void MyFunc();
};
Run Code Online (Sandbox Code Playgroud)

现在,我真的很想读它

class MyClass
{
public:
   CMyObject A,B;

   void MyFunc(CMyObject &Object = A);
};
Run Code Online (Sandbox Code Playgroud)

但我不允许有一个非静态成员的默认参数.我已经读过这个类似的问题,这表明这是不可能的,但我想知道是否有任何合理的解决方法.原因是95%的时间将使用默认参数,因此使用默认参数将大大减少我必须更改的代码量.到目前为止,我最好的解决办法是这样的;

class MyClass
{
public:
   CMyObject A,B;

   void MyFunc(BOOL IsA = TRUE);
};

void MyClass::MyFunc(BOOL IsA)
{
    CMyObject &Object = A;
    if (!IsA)
        Object = &B;
}
Run Code Online (Sandbox Code Playgroud)

这不是很优雅,但有没有更好的方法来做到这一点,我错过了?

编辑: FWIW,额外参数的原因是从相关对象外部化一些状态相关成员以帮助多线程.

Ben*_*oît 20

怎么样 :

class MyClass
{
public:
   CMyObject A,B;

   void MyFunc()
   { 
     MyFunc(A); 
   }
   void MyFunc(CMyObject &Object);
};
Run Code Online (Sandbox Code Playgroud)