我有一个简单的记录器,用于我的应用程序。这里是一个(简化的)接口: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