【发布时间】:2011-01-18 18:15:48
【问题描述】:
我正在重构大量代码,我必须向许多函数添加额外的参数,这些函数将始终具有该对象成员的值。类似的东西
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,额外参数的原因是从相关对象中外部化一些与状态相关的成员以帮助多线程。
【问题讨论】:
-
如果它有一个数据成员,根据定义它不是无状态的。
-
公平点尼尔,文本已编辑。
标签: c++ default-value non-static