Или вот например dynamic_cast объявлен вселенским злом:
Do not use dynamic_cast except in test code. If you need to know type information at runtime in this way outside of a unittest, you probably have a design flaw. http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Casting
Хотя это стандартный способ определить тип класса имея ссылку или указатель на базовый класс (иногда это надо)
В общем, слегка архаичный документ, типа тех что используются в "корпорациях старого типа".
Здравствуйте, Handie, Вы писали:
H>Типа, exceptions сильно сложны и непонятны
Нет, просто у них много унаследованного кода без исключений, и вставлять исключения будет сложно.
H>Хотя это стандартный способ определить тип класса имея ссылку или указатель на базовый класс (иногда это надо)
Здравствуйте, Denis, Вы писали:
D>привет! думаю многие этот блог читают сами, но для тех, кто не видел может показатьи интересным
Короче говоря, приводят к Буденному перебежчика. Белого. Так, мол, и так, Семен Михайлович, постиг я в мгновение ока происходящее, дошла до меня безысходность белого движения. Чуять начинаю за три версты красоту ваших кавалерийских идей, возьмите к себе воевать. Хорошо. Переодели, переобули, дали красавца гнедого. Повоевал немного белый, но вдруг показалось ему, что снова постиг он в мгновенье ока происходящее и слинял к Деникину. Мужественно явился и говорит Самому: так, мол, и так, ошибся я. Буденный – полное говно, вокруг него мерзкий плебс, большей вони и совершенней лжи, чем советская власть, вообразить себе невозможно, и лучше уж, ваше превосходительство, смерть в наших безысходных рядах, чем торжество в смрадном каре обманутых маньяками плебеев. Простите великодушно. Время у нас смутное, возможен, согласитесь, поиск душой верного пути. Деникин не стал дискутировать на эту тему. Он отдал дважды перебежчика обратно Буденному. Белый стал втолковывать этой тупой усатой мандавше, что он не подлец, а человек ищущий, и наконец, в последней попытке спасти шкуру, брякнул что то насчет раздвоения личности. Буденный вынимает саблю, пробует отточку клинка на коготище и врезает красно белому по темечку. До самой жопы его расколол, а дальше тот сам рассыпался. «Мы – большевики, – говорит Буденный, – проблему раздвоения личности решаем по своему: сабелькой!»
Здравствуйте, Vintik_69, Вы писали:
H>>Типа, exceptions сильно сложны и непонятны
V_>Нет, просто у них много унаследованного кода без исключений, и вставлять исключения будет сложно.
с этим сложно несогласиться, НО их объяснение это перл просто: "“The availability of exceptions may encourage developers to throw them when they are not appropriate”" я думаю нужно пол-С++ запретить... там такого можно натворить
>с этим сложно несогласиться, НО их объяснение это перл просто: "“The availability of exceptions may encourage developers to throw them when they are not appropriate”" я думаю нужно пол-С++ запретить... там такого можно натворить
Ну, видимо apropriate style — это проверять код возврата всех функций и оператор new вернул не NULL.
sux>т.е. ООП тоже не применяется ввиду того, что конструкторы не имеют кодов возврата и исключение — это единственный способ sux>ну разве SetLastError юзают
Согласно их правилам, конструктор должен быть максимально простым и делать очень простой и lazy инит. А реальный конструктор — это функция(метод) с волшебным названием Init()
В этом есть доля мудрости, так как никогда не знаешь где и когда создается объект, например статические объекты создаются до входа в main, поэтому выкидывать исключения оттуда несколько рискованно...
Здравствуйте, Handie, Вы писали:
H>В этом есть доля мудрости, так как никогда не знаешь где и когда создается объект, например статические объекты создаются до входа в main, поэтому выкидывать исключения оттуда несколько рискованно...
Но они, как я понял, почти запретили использование глобальных объектов.
Здравствуйте, Handie, Вы писали:
H>Согласно их правилам, конструктор должен быть максимально простым и делать очень простой и lazy инит. А реальный конструктор — это функция(метод) с волшебным названием Init()
имхо изменяется принцип ООП разработки (что, имхо, так ли иначе приводит в кривому дизайну)
H>В этом есть доля мудрости, так как никогда не знаешь где и когда создается объект, например статические объекты создаются до входа в main, поэтому выкидывать исключения оттуда несколько рискованно...
синглтоны с отложенной инициализацией — им помогут ))
Здравствуйте, Handie, Вы писали:
H>В общем, слегка архаичный документ, типа тех что используются в "корпорациях старого типа".
Зато в яве и питоне наверно можно, иначе я себе не представляю как на них вообще писать можно
А вдруг это они таким маневром хотят всех с С++ пересадить, чтоб не городили тонны кода, читать который через n<N лет будет некому?
Здравствуйте, WolfHound, Вы писали:
WH>Слабаки. WH>Полностью запрещать нужно.
и как можно избежать использования глобальных переменных в "C"? кроме их определения в main и передачи их параметрами в функции ?
Здравствуйте, olegkr, Вы писали:
O>Здравствуйте, sergey2b, Вы писали:
S>>и как можно избежать использования глобальных переменных в "C"? O>Использовать структуры и передавать их?
я именно так и делаю, структура с вложенными подструктурами с глобальными переменными в функции передаю указатель
S>>>и как можно избежать использования глобальных переменных в "C"? O>>Использовать структуры и передавать их? S>я именно так и делаю, структура с вложенными подструктурами с глобальными переменными в функции передаю указатель
И у Вас есть только одна глобальная преременная типа gApplicationInstance?
И тогда мы получаем все конструкторы всех подобъектов вызываются до входа в main, что ограничивает использование исключений в конструкторах.
Кстати, если объект не может быть NULL, то передавать лучше по ссылке, ссылка не может быть NULL
S>надеялся может есть еще варианты
Полное отсутствие глобальных переменных:
int main()
{
try
{
Application *pApp = new Application;
pApp->Init();
pApp->Run();
pApp->Release();
}
catch(...)
{
// do something
}
return 0;
}
Полная гараннтия того, что все исключения будут отловлены и отработаны.
Хотя теперь я чаще делаю lazy init — минимум работы в конструкторе и никаких аллокаций
Здравствуйте, Handie, Вы писали:
H>И у Вас есть только одна глобальная преременная типа gApplicationInstance? H>И тогда мы получаем все конструкторы всех подобъектов вызываются до входа в main, что ограничивает использование исключений в конструкторах.
нет есть одна gApplicationInstance переменная в main которая передаеться во все функции которые вызывает main и во все вложенные подфункции
H>Полное отсутствие глобальных переменных:
мы не можем использовать объекты только анси C.
H>Хотя теперь я чаще делаю lazy init — минимум работы в конструкторе и никаких аллокаций
если не секрет почему вы стали использовать lazy init?