Tôi đang tái cấu trúc một số lượng lớn mã, trong đó tôi phải thêm tham số phụ vào một số hàm, sẽ luôn có giá trị của một thành viên của đối tượng đó. Một cái gì đó nhưThành viên không tĩnh làm tham số mặc định trong C++
class MyClass
{
public:
CMyObject A,B;
void MyFunc(CMyObject &Object);
// used to be void MyFunc();
};
Bây giờ, tôi muốn thực sự thích nó để đọc
class MyClass
{
public:
CMyObject A,B;
void MyFunc(CMyObject &Object = A);
};
Nhưng tôi không được phép có một tham số mặc định đó là một thành viên không tĩnh. Tôi đã đọc this similar question cho thấy điều này là không thể, nhưng tôi tự hỏi nếu có bất kỳ cách giải quyết hợp lý nào. Lý do là 95% thời gian tham số mặc định sẽ được sử dụng, và do đó sử dụng tham số mặc định sẽ làm giảm đáng kể lượng mã tôi phải thay đổi. Giải pháp tốt nhất của tôi cho đến nay là một cái gì đó như thế này;
class MyClass
{
public:
CMyObject A,B;
void MyFunc(BOOL IsA = TRUE);
};
void MyClass::MyFunc(BOOL IsA)
{
CMyObject &Object = A;
if (!IsA)
Object = &B;
}
Điều này ít hơn rất nhiều, nhưng có cách nào tốt hơn để làm điều này mà tôi bị thiếu không?
Chỉnh sửa: FWIW, lý do cho thông số bổ sung là để bên ngoài một số thành viên liên quan đến tiểu bang từ đối tượng được đề cập để hỗ trợ đa luồng.
Nếu thành viên có dữ liệu, theo định nghĩa, nó không phải là quốc tịch. –
Điểm công bằng Neil, soạn thảo văn bản. –