给定以下工作代码。
#include <iostream>
template<class Detail>
class AbstractLogger
{
public:
static void log(const char* str) {
Detail::log_detailled(str);
}
};
class Logger : public AbstractLogger<Logger>
{
public:
static void log_detailled(const char* str) {
std::cerr << str << std::endl;
}
};
int main(void)
{
AbstractLogger<Logger>::log("main function running!");
return 0;
}
现在,我想放入AbstractLogger
一个库,让库用户定义自己的记录器,就像Logger
这里的类一样。这有一个缺点:AbstractLogger<Logger>
不能在库内部使用,因为库无法知道Logger
.
笔记:
- 请不要虚函数或问题为什么不。另外,我知道“静态虚拟”成员无效的类似问题。也许,CRTP 中有一个解决方法:)
- C++11 会很有趣,但是,我需要“通常的”C++。