簡體   English   中英

非靜態成員作為C ++中的默認參數

[英]Non static members as default parameters in C++

我正在重構大量的代碼,我必須在一些函數中添加一個額外的參數,這些函數總是具有該對象成員的值。 就像是

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

這不是很優雅,但有沒有更好的方法來做到這一點,我錯過了?

編輯: FWIW,額外參數的原因是從相關對象外部化一些狀態相關成員以幫助多線程。

怎么樣 :

class MyClass
{
public:
   CMyObject A,B;

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

其他方式:

class MyClass
{
public:
   MyObject A,B;

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

這使得甚至無法從另一個MyClass實例傳入MyObject成員。 調用MyFunc的三個有效選項是.MyFunc() .MyFunc(&MyClass::A) MyFunc .MyFunc(&MyClass::A).MyFunc(&MyClass::B)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM