开发者

Non static members as default parameters in C++

开发者 https://www.devze.com 2022-12-20 12:33 出处:网络
I\'m refactoring a large amount of code where I have to add an extra parameter to a number of functions, which will always have a value of a member of that object.Something like

I'm refactoring a large amount of code where I have to add an extra parameter to a number of functions, which will always have a value of a member of that object. Something like

class MyClass
{
public:
   CMyObject A,B;

   void MyFunc(CMyObject &Object);
   // used to be void MyFunc();
};

Now, I'd actually like it to read

开发者_开发问答class MyClass
{
public:
   CMyObject A,B;

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

But I'm not allowed to have a default parameter that is a non-static member. I've read this similar question which suggest this isn't possible, but I'm wondering if there is any reasonable workaround. Reason being that 95% of the time the default parameter will be used, and thus using a default parameter would hugely reduce the amount of code I have to change. My best solution so far is something like this;

class MyClass
{
public:
   CMyObject A,B;

   void MyFunc(BOOL IsA = TRUE);
};

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

This is less than elgant, but is there a better way of doing this that I'm missing?

Edit: FWIW, the reason for the extra parameter is to externalize some state related members from the object in question to aid multi-threading.


How about :

class MyClass
{
public:
   CMyObject A,B;

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

?


Another way:

class MyClass
{
public:
   MyObject A,B;

   void MyFunc(MyObject MyClass::*myObject = &MyClass::A) {
       MyObject& obj = *(this->*myObject);
   }
};

This makes it even impossible to pass in an MyObject member from another MyClass instance. Your three valid options to call MyFunc are .MyFunc(), .MyFunc(&MyClass::A) and .MyFunc(&MyClass::B)

0

精彩评论

暂无评论...
验证码 换一张
取 消