У меня следующая перегрузка operator<<()
для моего класса с С ++ 17 сгибов:
template <typename... Args>
ostream& operator <<(Args&&... args)
{
//Currently:
return (m_osCout << ... << args);
//What I need:
IF ANY OF THE parameters in args "was" of type, say TSeek,
which can be a manipulator function etc, then AFTER finishing
with the parameter pack, I would like to do some further operation
, for instance, restore the state of m_osCount
}
Возможно ли то, что мне нужно, как описано выше? Любые частичные ответы, чтобы установить некоторые направления будут оценены ...
Несмотря на то, что я придумал вопрос, как если бы я просил об автоматическом восстановителе потоковых флагов, пожалуйста, обратите внимание, что я придерживаюсь общего решения, особенно не восстанавливая std::cout
или восстановление объекта o / istream.
На практике мой класс является своего рода математическим объектом, который принимает пользовательские типы в качестве аргументов операторов, некоторые из которых требуют функций, подобных манипуляторам ostream, но, как правило, очень и очень неудобно требовать от пользователя предоставления некоторых завершающих операндов перед началом следующего такого использования.
Одна идея, которая пришла мне в голову, состояла в том, чтобы возвращать временный объект другого типа нового умного типа всякий раз, когда TSeek
был предоставлен в списке args...
, так что после того, как последний аргумент будет передан ему, он будет разрушен автоматически, и это действительно то время, когда я хочу выполнить свою задачу!
Должен ли я поступить так или ...?