Problem with C++ templates -


i trying build small logger library. facig problem c++ templates. here class structure looks like.

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; 

here expecting stdout_logger_t::log called output. looks derived type getting lost , abstract_logger_t::log ends getting called. can tell me if doing wrong ?

template<typename data_t> abstract_logger_t& operator<< (abstract_logger_t& logger, const data_t& data)  {   output(logger, data);   return logger; } 

here, whatever logger pass in, compiler convert abstract_logger_t&. need make first argument templated too.

template<typename t, typename data_t> t& operator<< (t& logger, const data_t& data)  {   output(logger, data);   return logger; } 

Comments

Popular posts from this blog

c++ - How do I get a multi line tooltip in MFC -

asp.net - In javascript how to find the height and width -

c# - DataTable to EnumerableRowCollection -