Estoy refacturando una gran cantidad de código donde tengo que agregar un parámetro adicional a una serie de funciones, que siempre tendrán el valor de un miembro de ese objeto. Algo así comoMiembros no estáticos como parámetros predeterminados en C++
class MyClass
{
public:
CMyObject A,B;
void MyFunc(CMyObject &Object);
// used to be void MyFunc();
};
Ahora, me gustaría realmente como para que se lea
class MyClass
{
public:
CMyObject A,B;
void MyFunc(CMyObject &Object = A);
};
Pero no se me permite tener un parámetro por defecto que es un miembro no estática. He leído this similar question que sugieren que esto no es posible, pero me pregunto si hay alguna solución razonable. La razón es que el 95% del tiempo se utilizará el parámetro predeterminado y, por lo tanto, el uso de un parámetro predeterminado reduciría enormemente la cantidad de código que tengo que cambiar. Mi mejor solución hasta ahora es algo como esto;
class MyClass
{
public:
CMyObject A,B;
void MyFunc(BOOL IsA = TRUE);
};
void MyClass::MyFunc(BOOL IsA)
{
CMyObject &Object = A;
if (!IsA)
Object = &B;
}
Esto es menos de elgant, pero hay una mejor manera de hacer esto que me falta?
Edit: FWIW, la razón del parámetro adicional es externalizar algunos miembros relacionados con el estado del objeto en cuestión para ayudar a multi-threading.
Si tiene un miembro de datos, por definición no es apátrida. –
Fair point Neil, texto editado. –