Ik ben bezig met een soort debug class. Deze class kan de output sturen naar console maar ook naar een file of streamen over het netwerk. Het is een beetje afgekeken van qDebug().
.
C++:
Vervolgens ga ik te werk:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
| #include <iostream> #include <iomanip> class XDebug { public: enum messageType { DebugMsg,WarningMsg,CriticalMsg }; inline XDebug(messageType t) : stream(new Stream(t)) {} inline ~XDebug() { stream->os << std::endl; } inline XDebug &maybeSpace() { if (stream->space) stream->os << " "; return *this; } inline XDebug &operator<<(const char *t) { stream->os << t; return maybeSpace(); } inline XDebug &operator<<(std::string t) { stream->os << t; return maybeSpace(); } inline XDebug &operator<<(struct _Setw t) { stream->os << t; return maybeSpace(); } private: struct Stream { Stream(messageType t) : os(std::cout), type(t), space(true) {} std::ostream &os; messageType type; bool space; } *stream; }; inline XDebug xDebug() { return XDebug(XDebug::DebugMsg); } |
C++:
Dan krijg ik:1
| xDebug() << std::setw(10) << "10" << "Hallo" |
code:
Hoe kan ik std::setw universeel (dus portable) laten zijn op mijn eigen xDebug object. Ik heb in de header iomanip gekeken en daar heeft men een wrapper gebouwd die van std::ostream.width() aan roept. Ik vrees dat ik ook een eigen wrapper moet maken 1
| main.cpp:134: error: no match for ‘operator<<’ in ‘xDebug()() << std::setw(10)’ |
Inkoopacties - HENK terug! - Megabit
It is a war here, so be a general!