3 /* http://vision.kuee.kyoto-u.ac.jp/~nob/doc/win32/win32.html#doc1_42
10 #define STDX_DSTREAM_H
17 // VC++
\82Å STLport
\82¾
\82Æ using std::char_traits;
\82Ý
\82½
\82¢
\82È
\82Ì
\82ª
\95K
\97v
\82©
\82à
18 template <typename Ch_T, typename Tr_T = std::char_traits<Ch_T> >
19 class basic_dbg_streambuf: public std::basic_stringbuf<Ch_T, Tr_T>
24 #ifndef STDX_DSTREAM_BUFFERING
29 virtual ~basic_dbg_streambuf()
37 dbg_out(str().c_str());
38 pbump(static_cast<int>(pbase() - pptr()));
42 void dbg_out(const Ch_T*);
46 inline void basic_dbg_streambuf<char>::dbg_out(const char *str)
48 ::OutputDebugStringA(str);
52 inline void basic_dbg_streambuf<wchar_t>::dbg_out(const wchar_t *str)
54 ::OutputDebugStringW(str);
57 template <typename Ch_T, typename Tr_T = std::char_traits<Ch_T> >
58 class basic_dbg_ostream: public std::basic_ostream<Ch_T, Tr_T>
61 basic_dbg_ostream() : std::basic_ostream<Ch_T, Tr_T>(new basic_dbg_streambuf<Ch_T, Tr_T>())
65 virtual ~basic_dbg_ostream()
67 // flush(); //
\95s
\97v
\82ç
\82µ
\82¢
\81Dhttp://www.tietew.jp/cppll/archive/607
72 typedef basic_dbg_streambuf<wchar_t> wdbg_streambuf;
73 typedef basic_dbg_ostream<wchar_t> wdstream;
75 //
\82±
\82ê
\82ð
\92è
\8b`
\82µ
\82Ä
\82¨
\82
\82Æ
\81C dout
\82Ì
\90é
\8c¾
\82ª
\82¢
\82ç
\82È
\82
\82È
\82é
\81D
77 static wdstream wdout;
78 #define DOUT(x) wdout << x
83 // struct dummy_wdout {
84 // //template <typename R>
85 // //inline dummy_wdout& operator<<(const R v) {return *this;};
87 // //template <typename R>
88 // //inline dummy_wdout& operator<<(const R* v) {return *this;};
90 // //template <typename R>
91 // //inline dummy_wdout& operator<<(const R& v) {return *this;};
93 // //template <typename R>
94 // //inline dummy_wdout& operator<<(const R&& v) {return *this;};
96 // ////template <typename R,int N>
97 // ////inline dummy_wdout& operator<<(const R(&a)[N]) {return *this;};
101 // static dummy_wdout wdout;
104 //template <typename L>
105 //inline sf::dummy_wdout& operator<<(sf::dummy_wdout& p,const L v) {return p;};
107 //template <typename L>
108 //inline sf::dummy_wdout& operator<<(sf::dummy_wdout& p,const L& v) {return p;};
110 //template <typename L>
111 //inline sf::dummy_wdout& operator<<(sf::dummy_wdout& p,const L&& v) {return p;};
113 ////template <typename L>
114 ////inline sf::dummy_wdout& operator<<(sf::dummy_wdout& p,const L* v) {return p;};
116 //template <typename L,int N>
117 //inline sf::dummy_wdout& operator<<(sf::dummy_wdout& p,const L(&a)[N]) {return p;};
119 //template <typename L>
120 //inline L& operator<<(const L v,sf::dummy_wdout& p) {return v;};
122 //template <typename L>
123 //inline L& operator<<(sf::dummy_wdout& p,L v) {return v;};
126 //template <typename L>
127 //inline sf::dummy_wdout& operator<<(const L v,sf::dummy_wdout& p) {return p;};
129 //template <typename L>
130 //inline sf::dummy_wdout& operator<<(const L& v,sf::dummy_wdout& p) {return p;};
132 ////template <typename L>
133 ////inline sf::dummy_wdout& operator<<(const L* v,sf::dummy_wdout& p) {return p;};
135 //template <typename L>
136 //inline sf::dummy_wdout& operator<<(const L&& v,sf::dummy_wdout& p) {return p;};
139 //template <typename L,int N>
140 //inline sf::dummy_wdout& operator<<(const L(&a)[N],sf::dummy_wdout& p) {return p;};
142 //template <typename L>
143 //inline sf::dummy_wdout& operator<<(sf::dummy_wdout& p , const L *v) {return p;};
148 #endif // STDX_DSTREAM_