我重构了大量的代码,我必须为大量函数添加额外的参数,这些函数将始终具有该对象成员的值。像非静态成员作为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