我正在尝试构建小型记录器库。 我是facig C++模板的一些问题。 这是我的课堂结构。C++模板问题
class abstract_logger_t {
public:
typedef abstract_logger_t logger_type;
template<typename data_t>
abstract_logger_t& log(const data_t& data) {
return *this;
}
};
class stdout_logger_t : public abstract_logger_t {
public:
typedef stdout_logger_t logger_type;
template<typename data_t>
stdout_logger_t& log(const data_t& data) {
cout << data << endl;
return *this;
}
};
template<typename logger_t, typename data_t>
void output(logger_t& logger, const data_t& data) {
static_cast<typename logger_t::logger_type&>(logger).log(data);
cout << data;
}
template<typename data_t>
abstract_logger_t& operator<< (abstract_logger_t& logger, const data_t& data) {
output(logger, data);
return logger;
}
stdout_logger_t logger;
logger << "Hi " << 1;
这里我期待stdout_logger_t :: log被输出调用。 但它看起来像派生类型正在丢失 和abstract_logger_t :: log最终被调用。 有人可以告诉我,如果我做错了什么?
你为什么施放你的记录器?如果没有静态演员,模板不会工作吗? – josefx 2010-07-24 13:02:31