Я реализовал очень простой (ошибочный) класс регистратора. Это выглядит следующим образом:Ошибка регистрации в C++
#pragma once
#include <string>
extern const char* LOG_DEFAULT_TEXT = "<LOG>\n\n";
class Log
{
public:
Log() : _logs(0), _log(LOG_DEFAULT_TEXT) {};
void add(const char *str, bool nl=true);
void clear();
const char* get() const { return _log.c_str(); }
int getNumLogs() const { return _logs; }
private:
std::string _log;
int _logs;
};
Теперь мой вопрос, что у меня есть это главный класс, который содержит все другие объекты, что моя программа может содержать, а также этот класс Log. Очевидно, что я хотел бы, чтобы эти «другие объекты» в моем основном классе могли использовать объект журнала в Main, поэтому простым решением было бы передать указатели на каждый конструктор класса, чтобы он мог использовать объект журнала.
Я говорю о чем-то вроде этого:
//Main.h
...
#include "Log.h"
class Main() {
public:
...
private:
Log _log;
ImportantObject1(&_log); //pass a pointer to _log
ImportantObject2(&_log); //..same
};
Это решение кажется слишком неуклюжи, поэтому я прошу, если есть разные подходы для того, что я хочу сделать, что протоколирования ошибок.
И если более гибкий подход необходим, что бы т он [Service Locator] (http://gameprogrammingpatterns.com/service-locator.html). – Quentin
@Quentin Это звучит немного над спроектированным для такого простого использования, как ведение журнала. –
Вы возвращаете локальную переменную в качестве ссылки, она не будет работать хорошо;) –