00001 #ifndef DVUTIL_DEBUG_H 00002 #define DVUTIL_DEBUG_H 00003 // $Id: debug.h,v 1.2 2003/08/12 08:42:15 dvermeir Exp $ 00004 #include <iostream> 00005 00006 namespace Dv { 00007 namespace Util { 00008 /** A simple class template for dumping an object to a stream. 00009 * This is useful if e.g. @a operator<<(ostream&, T) is 00010 * already used. In such a case, one defines 00011 * a const member @a T::Debug(ostream&) and then uses it as in the 00012 * fragment below. 00013 * @code 00014 * T t; 00015 * cout << "T object=\n" << Debug<T>(t) << std::endl; 00016 * @endcode 00017 */ 00018 template <typename T> 00019 class Debug { 00020 public: 00021 /** Constructor 00022 * @param t reference to object to be printed. 00023 */ 00024 Debug(const T& t): t_(t) {} 00025 /** Print Debug version of object. 00026 * @param os output stream on which to print 00027 * @param d Debug wrapper around object 00028 * @return os 00029 */ 00030 friend std::ostream& operator<<(std::ostream& os, const Debug<T>& d) { 00031 d.t_.debug(os); return os; 00032 } 00033 private: 00034 Debug(const Debug<T>&); // forbidden 00035 Debug<T> operator=(Debug<T>&); // forbidden 00036 const T& t_; 00037 }; 00038 }} 00039 #endif 00040
dvutil-0.13.15 | [30 December, 2004] |