Здравствуйте, Sergey, Вы писали:
S>Если не забывать про исключения, которые могут кинуть те же MFC, то
S>использование смартпоинтеров в таком контексте является не вопросом стиля, а
S>вопросом возможности утечек памяти.
Есть ещё try-catch. Да и какое там исключение может вылететь — нехватка памяти для создания временного CWnd? Скажем, в коде юзер-интерфейса я б смело считал, что исключений в MFC не бывает. В более ответственном коде, конечно... впрочем в более ответственном коде MFC лишний.
S>Там каст лишний. Если нравится две строчки вместо одной, то следовало
S>написать хотя бы: <...>
Так лучше, разумеется. Кто идеален?
S>Мне тут не понравилось в основном не то, что переменная вместо константы
S>используется, а то, что она определена черти где и вместо одной понятной
S>строчки SetDlgItemText("") присутствуют 2, непонятно что в едит выводящие.
Ну, некрасиво. Ну не совсем оптимально. Я в нашей реально и массово работающей системе видел много кода и поуродливей.

Работает — главный критерий.
S>Нет у них аргументов
Единственный аргумент был когда-то — так
S>компиляторы писать проще, сразу видно сколько стека под локальные переменные
S>отъесть.
Не только. Там ещё был аргумент наглядности — алгоритм чётко отделён от объявлений данных. В блоке кода выполняются
только действия. В блоке объявлений (и списке параметров функции) объявлены
все данные, которые нужны коду. Это читабельней и красивей с точки зрения немалого кол-ва людей. Я с ними не согласен, но такие понятия как "красивее" и "удобнее", они из области субъективного, поэтому спор тут дохлый.
S>Не бывает типов, которые стопудово не изменятся. А искать при рефакторинге <...>
Да, есть весомые плюсы и у С++'ных (самое-то главное — позволяют разделить вид преобразования типа, а сишный лупит "всё ко всему"). Читабельность субъективна, тут разные мнения. Однако, тип возвращаемого значения CWnd::GetDlgItem смело можно считать зафиксированным на века. С рефакторингом, конечно, беда, но понадобится ли он? Вряд ли. Или на уровне: "пойми, что тут делается и напиши такое же, но по другому"
Hello, tarkil!
You wrote on Fri, 24 Dec 2004 09:31:24 GMT:
S>> Если не забывать про исключения, которые могут кинуть те же MFC, то
S>> использование смартпоинтеров в таком контексте является не вопросом
S>> стиля, а вопросом возможности утечек памяти.
t> Есть ещё try-catch.
Мазохизм. Тогда уж лучше malloc использовать.
t> Да и какое там исключение может вылететь — нехватка памяти для создания
t> временного CWnd?
Ну на 0 же он зачем-то результат malloc проверяет...
t> Ну, некрасиво. Ну не совсем оптимально.
Ну да. Это я собственно и ругаю.
t> Я в нашей реально и массово работающей системе видел много кода и
t> поуродливей.
Работает — главный критерий.
Еще есть такой критерий — "легко поддерживать"
S>> Нет у них аргументов
Единственный аргумент был когда-то — так
S>> компиляторы писать проще, сразу видно сколько стека под локальные
S>> переменные отъесть.
t> Не только. Там ещё был аргумент наглядности — алгоритм чётко отделён от
t> объявлений данных. В блоке кода выполняются только действия. В
t> блоке объявлений (и списке параметров функции) объявлены все
t> данные, которые нужны коду. Это читабельней и красивей с точки зрения
t> немалого кол-ва людей. Я с ними не согласен, но такие понятия как
t> "красивее" и "удобнее", они из области субъективного, поэтому спор тут
t> дохлый.
В данном конкретном случае этот аргумент не катит. Потому что тут более
одного алгоритма — ввод данных из UI, работа с железякой, вывод данных в UI.
S>> Не бывает типов, которые стопудово не изменятся. А искать при
S>> рефакторинге <...>
t> Однако, тип возвращаемого значения CWnd::GetDlgItem смело можно считать
t> зафиксированным на века.
Неа. Листбоксы иногда (часто) со временем заменяют на ListView.
With best regards, Sergey.
Posted via RSDN NNTP Server 1.9 delta
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Здравствуйте, Sergey, Вы писали:
S>Неа. Листбоксы иногда (часто) со временем заменяют на ListView.
Я имел в виду, что GetDlgItem всегда вернёт CWnd*. А преобразовывать CWnd* к CListBox при помощи C-style cast или static_cast — некорректный тип словишь так или иначе. static_cast тоже не контролирует реальный тип. А dynamic_cast MFC не поддерживает, насколько я помню.
Ладно, Сергей, давайте закругляться, а то флеймить так можно долго. Тем более, что единственное разногласие у нас в оценке. У Вас: "за такое руки отрывать", у меня: "можно и получше". Беседа на эту тему непродуктивна, imho.
Hello, tarkil!
You wrote on Fri, 24 Dec 2004 10:32:11 GMT:
t> Я имел в виду, что GetDlgItem всегда вернёт CWnd*. А преобразовывать
t> CWnd* к CListBox при помощи C-style cast или static_cast — некорректный
t> тип словишь так или иначе. static_cast тоже не контролирует реальный
t> тип. А dynamic_cast MFC не поддерживает, насколько я помню.
У MFC IsKindOf есть. Впрочем, здесь это было бы лишним, IMHO.
t> Ладно, Сергей, давайте закругляться, а то флеймить так можно долго.
угу.
With best regards, Sergey.
Posted via RSDN NNTP Server 1.9 delta
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.