Tôi đang viết một lớp có nhiều thông điệp đầu ra. Tôi muốn làm cho lớp này nói chung và nền tảng độc lập, vì vậy tôi đang nghĩ đến việc chuyển một tham chiếu basic_ostream vào nó và nó có thể đổ tất cả thư vào luồng. Bằng cách này, nếu lớp được sử dụng trong một chương trình điều khiển, tôi có thể vượt qua std :: cout vào nó và hiển thị trong cửa sổ bảng điều khiển.Làm thế nào để lấy được từ C++ std :: basic_ostream và làm cho toán tử << ảo?
Hoặc tôi có thể chuyển một luồng có nguồn gốc đến nó và chuyển hướng thư đến một số thành phần giao diện người dùng, ví dụ: ListBox? Vấn đề duy nhất là việc chèn dữ liệu operator <<
không phải là một chức năng ảo. Nếu tôi chuyển tham chiếu lớp dẫn xuất đến nó, chỉ có nhà điều hành basic_ostream < < sẽ được gọi.
Có cách giải quyết nào cho vấn đề này không? Câu trả lời của riêng
Tại sao không sử dụng giao diện 'std :: ostream' và thay đổi ambuf' dựa trên bối cảnh của bạn? Không cần chức năng ảo. – mavam
Bạn không thể thực hiện chức năng không phải thành viên ảo. 'operator <<' không phải là thành viên của 'basic_ostream', mà là một hàm tự do. –
@MatthiasVallentin: Nhưng tôi cần phải vượt qua lớp cơ sở std :: ostream tham chiếu đến lớp của tôi. Trong trường hợp này, lớp dẫn xuất của tôi từ toán tử << của ostream sẽ không bao giờ được gọi. –