Tôi có một lớp C++ mà tôi muốn giữ luồng được sử dụng để ghi nhật ký.Dòng C++ dưới dạng biến thành viên
Luồng có thể được đặt (và có thể đặt lại) sau khi xây dựng đối tượng.
Bạn có thể đặt luồng là std::cout
hoặc dưới dạng luồng tệp để đăng nhập vào tệp hoặc dưới dạng chuỗi không làm gì hơn là bỏ qua dữ liệu (một loại /dev/null
). Trong mọi trường hợp, nó phải là đối tượng loại ostream
, mà tác giả của đối tượng có thể đặt lại bất kỳ lúc nào. Bản thân lớp này không biết gì về loại luồng cụ thể.
tôi có thể thực hiện điều này với một con trỏ đến một ostream, nhưng sau đó các cú pháp trở thành một chút khó chịu, cần phải sử dụng các nhà điều hành deref:
(*m_log) << "message";
hơn
m_log << "message";
Nhưng tôi có thể Không sử dụng tài liệu tham khảo, vì đối tượng luồng cần phải được đặt lại sau khi đối tượng đã được khởi tạo.
Có cách nào thanh lịch để đạt được điều này, tức là, tránh sử dụng con trỏ, nhưng vẫn có thể đặt lại sau khi xây dựng?
Tại sao bạn không cung cấp một chức năng thành viên nhỏ trở về một tham chiếu đến luồng của mình? một cái gì đó dọc theo con đường: ostream & mlog() {return * m_log;}. Sau đó bạn sẽ viết: mlog() << "message"; – fjardon
Sử dụng một con trỏ, và bắt đầu chức năng của bạn với 'std :: ostream & o = * m_log;'. –
@fjardon: Tại sao bạn không cung cấp câu trả lời nhỏ như vậy? P – Xeo