현재이 코드를 사용하는 각 코드에 대해 클래스의 새 인스턴스를 만듭니다. 생성자는 문자열 이름을 사용하므로 내 메서드를 호출 한 클래스 내부를 알 수 있습니다.클래스는 어떻게 누가 그 메소드를 호출했는지 알 수 있습니까?
class Log {
public:
Log(std::string Name) : name(Name) {}
void Print(std::string Message) {
std::cout << name << " said " << Message << std::endl;
}
private:
std::string name;
};
이 예제 클래스는 추상 유형에서 파생 된 모듈 범위에서 사용됩니다.
class Module {
public:
Module(std::string Name) : log(new Log(Name)) {}
virtual void Update() = 0;
private:
Log *log;
};
class Renderer : public Module {
public:
void Update() {
log->Print("Hello World!");
}
};
Renderer renderer("Renderer");
renderer.Update(); // "Renderer says Hello World!"
이제 모든 모듈에 동일한 Log
인스턴스를 공유하고 싶습니다. 메소드 호출이 어디에서 왔는지와 어떻게 구별 할 수 있습니까?
배경 : 많은 모듈이 있으며 두 가지 유형의 클래스를 사용합니다. 첫째, 모듈간에 전 세계적으로 공유되는 관리자. 둘째, 위의 예제 클래스와 같은 헬퍼는 각 모듈에 대해 개별적으로 만들어집니다. 그러나 나는 더 단순한 디자인을 위해 둘 모두의 단일 추상화를 찾고 싶다. 서로 다른 모듈의 메시지를 서로 다른 색상으로 고르게 분포시켜야하는 로깅 도우미를 생각해보십시오. 이러한 도우미는 모든 모듈에서 상태를 공유해야합니다.
그것은 좋은 생각은 아니지만 당신이 시도 할 수 있습니다 : http://www.gnu.org/software/libc/manual/html_node/Backtraces.html를 – tumdum
당신은 할 수 없습니다. 그래서 우리는 접근 수정자를 사용합니다. –
모듈이 로거에게 모듈을 말해 줄 수 없습니까? 아니면 그냥 변화하는 색상, 어떤 색상을 사용할 수 있습니까? –