我正在嘗試構建小型記錄器庫。 我是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