- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
class Message {
public:
explicit Message(Level level);
~Message();
Level level() const { return level_; }
const time_t& time() const { return time_; }
std::string text() const { return s_.str(); }
bool enabled() const { return enabled_; }
template<class T>
Message& operator << (const T& t)
{
if (enabled_)
s_ << t;
return *this;
}
Message(Message& msg) { moveFrom(msg); }
Message& operator = (Message& msg) { moveFrom(msg); return *this; }
struct Ref {
explicit Ref(Message& msg): msg_(&msg) {}
Message* msg_;
};
operator Ref() { return Ref(*this); }
Message(Ref r) { moveFrom(*r.msg_); }
Message& operator = (Ref r) { moveFrom(*r.msg_); return *this; }
private:
Level level_;
time_t time_;
std::ostringstream s_;
bool enabled_;
void moveFrom(Message& msg)
{
level_ = msg.level_;
time_ = msg.time_;
s_.str(msg.s_.str());
enabled_ = msg.enabled_;
msg.enabled_ = false;
}
};
bormand 30.10.2014 14:18 # 0
P.S. А, оно у исходного объекта портит флаг enabled_, после чего у того ломается оператор <<... Извращенная семантика, однако.
roman-kashitsyn 30.10.2014 14:27 # 0
Потому и здесь :) Непонятно, зачем было городить столько огорода. Ладно бы стейт на куче жил... Тогда бы вообще проще было использовать std::auto_ptr<Impl> и полагаться на костыли стандартной библиотеки вместо написания аналогичных собственноручно.
bormand 30.10.2014 14:44 # 0
guestinho 02.02.2017 15:56 # 0
> перемещение без rvalue ссылок
> auto_ptr
roman-kashitsyn 02.02.2017 16:02 # 0
Я понимаю, что не все люди хорошо ориентируется в 4 измерениях, поэтому тебе, наверное, не приходило в говову, что код мог быть написан гораздо раньше, чем опубликован.
bormand 02.02.2017 19:52 # +2
Какое замечательное слово!
roman-kashitsyn 02.02.2017 22:04 # +1
в говнову
3.14159265 30.10.2014 15:10 # 0
А компилируется оно под старым стандартом?
bormand 30.10.2014 15:38 # 0
Конечно, тут же ни одной фишки из с++11 не поюзали.
Анонимус 30.10.2014 16:04 # +3
roman-kashitsyn 30.10.2014 16:19 # −1
DBdev 03.11.2014 17:15 # 0
ЗЫЖ Недавно увидел интервью с вопросом "Надо ли программисту знать математику?". Это Вы там были?
roman-kashitsyn 03.11.2014 18:40 # 0
В интервью был я, на хабре переодически выходят тематические нарезки с интервью.