我重構了大量的代碼,我必須爲大量函數添加額外的參數,這些函數將始終具有該對象成員的值。像非靜態成員作爲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);
};
但我不能有一個默認的參數是一個非靜態成員。我已閱讀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,額外參數的原因是從相關對象的某些狀態相關成員的外部來幫助多線程。
如果它有一個數據成員,根據定義它不是無狀態的。 – 2010-02-19 12:11:52
公平點尼爾,文本編輯。 – 2010-02-19 12:34:46