- 1
- 2
- 3
CoolIntf::GetInstance().DoSomething();
CoolIntf::GetInstance().DoSomethingElse();
CoolIntf::GetInstance().DoAnything()
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+1
CoolIntf::GetInstance().DoSomething();
CoolIntf::GetInstance().DoSomethingElse();
CoolIntf::GetInstance().DoAnything()
для случая когда GetInstance() не инлайнится, кто-нибудь в крестах какое решение (без ручного введения временной переменной) для такого кода придумал?
единственное что нашел это вот это: https://stackoverflow.com/a/2279253 .
потому что "with" слишком общее слово которое в ж не гуглится.
первый вызов нужен, но последующие хочется как то убрать.
(1) там еще авто нету.
(2) ничего, но я хочу что бы это `p` было в какой scope загнано.
я пробовал извраты на тему `for (auto& p = Aaa::GetInst(); ; ) { /* body */'; break; }`. но там было Нное количество мелких граблей (наброски в офисе - так не вспомню).
главное: это очень мелкая проблема что бы для неё код перерасхерачивать.
то что я в офисе пытался делать, набросок:
но как выяснилось, в `for()` нельзя переменные разных типов объявлять.
с этими гну фичами ни разу н игрался - https://stackoverflow.com/questions/29117836/attribute-const-vs-attribute-pure-in-gnu-c
по не-русски?
я на просто пытался прикрутить типичный `with` других языков к крестам.
Какой ещё деструктор, там же ссылка, тем более неконстантная.
ЗЫ жаль что к моему текущему проекту не применимо, т.к. на референсах все. указатели всегда надо проверять и кидать ошибку если нулл.
ЗЗЫ а вот такое редиско-компилер не съедает (что с авто, что с конкретным типом):
"счастливого дебага", ага
в конце конечно изврат получается, но принцип интересный.
я еще попытался просто оператор сравнения перекрыть и с дамми классом сравнивать (вместо простой бул конверсии) но чего то мой гцц это отказывается в if'е переваривать (`(auto& x = WithHelper(Aaa::GetInstance())) == WithCompareDummy()`).
что есть весьма обидно, потому что много фич как раз для встроенщины полезны (энумы, конст-экспр).
Или он для обратного преобразования?
А reinterpret нужен, чтобы сказать "будем считать, что в этих байтах лежит что-то другое", без всякого подсчёта смещений.
но в данном конкретном проекте там стоит проверка (и обработка) ошибки доступа к глобальным объектам до того как инициализация оного завершилась. сама проверка - один глупый if. а вот вход в обработчик фатальных ошибок - толстый.