我有一個簡單的記錄器,用於我的應用程序。這裏是一個(簡化的)接口:C++:記錄器設計,線/函數信息作爲函數參數
class ILogger
{
public:
virtual void LogUnsafe(const LogPriority& priority, const boost::format& message) = 0;
virtual void Log(const LogPriority& priority, const boost::format& message)
{
if (priority <= logPriority_)
{
std::unique_lock<std::mutex> lock(loggerMutex_);
LogUnsafe(priority, message);
}
}
void Log(const LogPriority& priority, const std::string& message)
{
Log(priority, boost::format(message));
}
template<typename T, typename... Args>
void Log(const LogPriority& priority, boost::format &format, const T &v, Args... args)
{
Log(priority, boost::format(format) % v, args ...);
}
template<typename... Args>
void Log(const LogPriority& priority, const char *format, Args... args)
{
boost::format fmt(format);
Log(priority, fmt, args ...);
}
};
現在我需要(爲了便於錯誤檢測)包括在每一個日誌消息線和功能信息(使用__LINE__
和__FUNCTION__
)。合理地它應該作爲函數參數傳遞。和往常一樣,我不想在每次寫日誌消息時輸入所有這些宏。所以我在這裏遇到麻煩了。我如何優雅地將它們傳遞給日誌記錄功能,而無需在每條日誌消息中明確寫入它?
在此先感謝。
由於__LINE__是一個宏觀的,我認爲唯一的辦法就是讓不同的宏包含__LINE__宏。 – olevegard 2013-05-13 10:19:04
@olevegard,不知道這可以幫助。你能提供一個簡單的例子來說明這個想法嗎? – maverik 2013-05-13 10:21:00
您不應該使用「我」來識別您的接口。這是用戶不需要知道的實現細節。 – Dennis 2013-05-13 10:37:05