我目前正在向我们的日志库添加一些功能。其中之一是可以为一个类声明一个模块名,该类会自动预先添加到从该类中写入的任何日志消息中。但是,如果没有提供模块名称,则不会添加任何内容。目前我正在使用一个具有返回名称的静态函数的特征类。
template< class T >
struct ModuleNameTrait {
static std::string Value() { return ""; }
};
template< >
struct ModuleNameTrait< Foo > {
static std::string Value() { return "Foo"; }
};
可以使用辅助宏定义此类。缺点是模块名称必须在类之外声明。我希望这在课堂上是可能的。此外,我希望能够使用预处理器指令删除所有日志记录代码。我知道使用 SFINAE 可以检查模板参数是否具有某个成员,但由于其他人对模板不像我那么友好,因此必须维护代码,我正在寻找一种更简单的解决方案。如果没有,我将坚持使用特征方法。
提前致谢!