C++ 非静态成员作为C++;
我正在重构大量代码,其中我必须向许多函数添加一个额外的参数,这些函数的值总是该对象的一个成员。差不多C++ 非静态成员作为C++;,c++,default-value,non-static,C++,Default Value,Non Static,我正在重构大量代码,其中我必须向许多函数添加一个额外的参数,这些函数的值总是该对象的一个成员。差不多 class MyClass { public: CMyObject A,B; void MyFunc(CMyObject &Object); // used to be void MyFunc(); }; 现在,我真的想把它读出来 class MyClass { public: CMyObject A,B; void MyFunc(CMyObject
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;
}
这比埃尔甘特还差,但有没有更好的方法让我错过了呢
Edit: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(&MyClass::B)
如果它有一个数据成员,根据定义它不是无状态的。Fair point Neil,文本编辑。感谢Benoit,我知道有更好的方法。盯着屏幕看太久了,不客气。请注意,C#和Java中不允许重载,这是一种补偿方法。所以我想我还没有发明任何东西:-)我想你的意思是默认参数在C#和Java中是不允许的-它们当然允许重载(默认参数显然在C#4.0中)我想唯一的问题是如果默认参数A发生了变化,我们必须通过,比方说,然后要么在调用任何MyFunc()之前更新A,要么在任何地方调用MyFunc(C)而不是MyFunc()