KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I'm trying to make a simple logger class, and I want the ability to either log to either a generic ostream ( cout / cerr ) or a file. The design I have in mind is to allow the constructor to either take an ostream& or a filename, and in the latter case create an ofstream& and assign that to the class' private ostream& like so: class Log { private: std::ostream& os; public: Log(std::ostream& os = std::cout): os(os) { } Log(std::string filename) { std::ofstream ofs(filename); if (!ofs.is_open()) // do errorry things os = ofs; } }; Doing such gives me an error that ofstream 's assignment operator is private. Looking over that again, it occurred to me that making a reference to a local object probably wouldn't work, and making os a pointer to an ostream and declaring and deleting it on the heap worked with the ofstream case, though not with the ostream case, where the ostream already exists and is just being referenced by os (because the only place to delete os would be in the constructor, and I don't know of a way to determine whether or not os is pointing to an ofstream created on the heap or not). So how can I make this work, i.e. make os reference an ofstream initialized with a filename in the constructor?
Tags (comma-separated)
Save Edits
Cancel