Still having issues with ostreams, streambuf, filebufs etc etc etc..
This is a simple example of a log file class I'm trying to develop.
Debug.h
Code:
#ifndef DEBUG_H
#define DEBUG_H
#include <iostream>
#include <fstream>
class dbgBuf : public std::streambuf {
private:
std::streambuf* buffer;
public:
dbgBuf(std::streambuf * output_buffer);
};
class dbgFile : public std::ostream {
private:
std::filebuf output_buffer;
dbgBuf *indent_buffer;
public:
dbgFile(void);
dbgFile(const char *path);
~dbgFile(void);
};
#endif
Debug.cpp
Code:
#include "Debug.h"
dbgBuf::dbgBuf(std::streambuf * output_buffer) : buffer(output_buffer) {
}
dbgFile::dbgFile(void) {
}
dbgFile::dbgFile(const char *path) {
if (output_buffer.is_open()) {
output_buffer.close();
}
if (output_buffer.open(path, std::ios_base::out)) {
rdbuf(indent_buffer);
}
}
dbgFile::~dbgFile(void) {
if (output_buffer.is_open())
output_buffer.close();
}
main.cpp
Code:
int main (int argc, char * const argv[]) {
try
{
dbgFile dbg("/tmp/test.log");
dbg << "Hello, World!" << std::endl;
}
catch (...)
{
std::cerr << "Caught an exception" << std::endl;
}
return 0;
}
This crashes on the dbg << "Hello world" line. Why I don't know...
Re: Still having issues with ostreams, streambuf, filebufs etc etc etc..
You never point indent_buffer at any valid dbgBuf object.
And I'd be extremely weary about inheriting from std::streambuf.