цър-пър

3 отговора 284 прегледа
#1

цър-пър

Здравейте,

Интересно ми е как ще решите следния проблем:

Трябва да се създаде клас Message който да се инициализра с некъв поток тип ostream
и някво състояние да речем:

enum _State_t
{
_S_debug,
_S_verbose,
_S_info
};

Message msg(_S_debug, cout);

след тва искаме следните операции да работат:

msg << _S_state << "Наздраве" << 1 << " " << 0 << endl;

тогава когато _S_state == инициализираното състояние

и съотвенто да получавам като съобщение(при горната инициализация) нещо подобно:

$:DEBUG: "Наздраве"1 0
$:

съответно ако _S_state != инициализираното състояние нищо да не се изписва.

Имам некво решение и ако ви е интересно ще го споделя по нататък. Дано не ме сметнете за идиот с такава проста задача, но бих се зарадвал на някво елегантно решение.

Отговор
в отговор на Бaт Бaтko #2

Re: цър-пър

Ама много е гадно така да сложиш цър-пър за заглавие на темата, а вътре пак за някакви класове да говориш...

Като сложиш тема "цър-пър", вътре се пише какво месо да се носи, каква бира да се пие, и на коя полянка ще бъде барбекюто.

Мечтата е мисъл, мисълта е идея, всяка идея се реализира. Аз не мечтая, а реализирам идеите си.
Отговор
в отговор на Бaт Бaтko #3

Re: цър-пър

Без да му мисля, примерно така:

template <typename T>
Message& operator << (Message& msg, const T& t)
{
if (...) {// log condition
msg.m_cout << t;
}
return msg;
}

Предполагам logging levela не е известен през compile time и може да се променя.

Тебе какво те притеснява?

Отговор
в отговор на Nero #4

Re: цър-пър

Как ще се реализира //log condition в твоя случай и как ще се изпише в началото къв лог е (макар че второто не е толкова важно).
Може и без шаблони макар че шаблоните са яки.

Отговор