有一個singleton Logger
類,我覺得每次打印方法被調用時都會寫Logger::GetInstance()
很醜。我能想到的唯一解決方案是#define
。還有什麼更好的,或者在這種情況下這個宏是否合理?這個預處理器指令在這裏可以接受嗎?
#include <iostream>
#include <fstream>
class Logger
{
public:
static Logger& GetInstance();
~Logger();
template <typename T>
void Print(const T &t);
void SetNewline(bool b);
void SetLogging(bool b);
private:
Logger();
Logger(const Logger&);
void operator=(const Logger&);
bool newline;
bool log;
std::ofstream file;
};
int main()
{
#define logger Logger::GetInstance()
logger.Print("Hello");
//Logger::GetInstance().Print("Hello");
}
有每個需要登錄的對象,在構造函數中調用GetInstance()並存儲引用? –
爲什麼''定義'main'方法中的記錄器? '#define'不尊重範圍。如果你只想讓'logger'在那裏,你也可以使用'Logger&logger = Logger :: GetInstance()'。 – anderas
有點偏離主題,但我更願意將'Logger'作爲參數傳遞給任何需要記錄的函數。記錄器創建的單點將是主要功能。我不喜歡全球可用的可修改狀態。 – Onur