目前,我爲每個使用它的代碼創建一個類的新實例。構造函數接受一個字符串名稱,所以我知道在類內調用了我的方法。一個班級如何知道誰調用了它的方法?
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
你不能。出於這個原因,我們使用訪問修飾符。 –
模塊不能告訴記錄器它們是哪個模塊嗎?或者,如果它只是顏色的變化,使用哪種顏色? –