Delphi vs C++
, Часть 1
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.217.58] |
|
|
Правила раздела:
| Страницы: (117) « Первая ... 108 109 [110] 111 112 ... 116 117 ( Перейти к последнему сообщению ) |
Delphi vs C++
, Часть 1
|
Сообщ.
#1636
,
|
|
|
|
Цитата Это не аргумент . Волков бояццо - в лес не ходить . Как раз таки контроль на стороне компилятора и языка - это наиболее правильный подход, и он был заложен Виртом в язык изначально и умышленно. Чтобы приучать программиста к дисциплине, а не к вседозволенности. Кстати, в той же вики, отстутствие такой возможности в C++ приписывают именно к недостаткам языка (самый первый) Добавлено Цитата Только, в отличии от Delphi-программистов я могу выбрать реализацию от STLport, стандартную, реализацию от Qt, из ICU и т.д. Значит - интересуют И это ничем не лучше, чем явно указывать IID при объявлении интерфейса |
|
Сообщ.
#1637
,
|
|
|
|
Ладно, ребят, чтобы не ходить вокруг да около, напишите ка мне простенькую консольную программку, которая создаёт xls/xlsx файл в котором в ячейку B7 записано число 99, в ячейку A3 строка "abc", ну а для B7 выставлен формат 0.00(не помню как это будет выглядеть в форматной строке excel). |
|
Сообщ.
#1638
,
|
|
|
|
Цитата У, блин, да сто лет в обед, как в С++ не используются NTBS. Что такое NTBS? |
|
Сообщ.
#1639
,
|
|
|
|
Цитата Flex Ferrum @ При этом ты активно критикуешь реализацию описания интерфейса посредством абстрактного класса. Ну вряд ли критикую. Я просто утверждаю, что это - эмуляция понятия интерфейс. Цитата Flex Ferrum @ Я вполне могу (в случае, если я пользуюсь одним компилятором) делать dynamic_cast'ы, "нарушающие" границы dll-ек, и это будет прекрасно работать. И по простой причине - компилятор с RTTI отвечают за то, чтобы такие касты проходили корректно. Вот здесь главный упор - на один компилятор. То же самое я могу, используя bpl, которая, собственно, представляет собой dll с экспортом нужной для RTTI информацией. ДУмаю, в С++ примерно такой же механизм. А вот если просто передавать указатель на класс, то информация о типе не передается, об этом и речь. Цитата Flex Ferrum @ А когда ты в коде описываешь нечто под заголовком interface, этому нечто вполне можно присвоить некий RTTI-идентификатор. Автоматически, а значит навешивать явным образом UUID - это уже от лукавого (что и демонстрирует -Ins-). И кроссплатформенность тут приплетать ни к чему. Уж кому-кому, но не С++-сникам рассказывать про кроссплатформенность. Автоматически - можно, конечно. Вопрос в том - когда присваивать. Во время компиляции? Как давать в каждом билде один и тот же IID? IID тем и хорош, что присваивается интерфейсу один раз и навсегда. К сожалению, это - число, причем генерируемое довольно случайным образом. И IID нужен там, где RTTI может и не работать, поэтому он присваивается явно. Плюс - он идентифицирует интерфейс глобально, а не только в рамках данного модуля. Если хочешь, можешь считать IID тем самым идентификатором для RTTI. Одновременно выполняющем роль глобального идентификатора. Два-в-одном. И чем это плохо? |
|
Сообщ.
#1640
,
|
|
|
|
Цитата --Ins-- @ Значит - интересуют ![]() Да ничего меня не интересует. Просто я использую наиболее подходящую реализацию. К примеру, в рамках Qt логично использовать QString. Добавлено Цитата --Ins-- @ Что такое NTBS? Null Terminated Byte String. Добавлено Цитата Romkin @ Я просто утверждаю, что это - эмуляция понятия интерфейс. Глупость какая-то. Если интерфейс - это идиома, то любая реализация будет представлять из себя эмуляцию. Или же ты берешь за эталон дельфёвый interface? Ну тогда, конечно, эмуляция |
|
Сообщ.
#1641
,
|
|
|
|
Элементарно
![]() ![]() s := "foo"+"bar"+t+"rulez!" Или так: ![]() ![]() if s <> "foo" then ..... ..... if s = t then ...... Мне то можешь не говорить, учитывая мой любимый язык Цитата archimed7592 @ А это имеет значение? Ну если уж Си амнистировал, то почему бы и Дельфи не попасть под амнистию? но, так или иначе, это было в каком году? И в каком году появились UUID'ы в Delphi? |
|
Сообщ.
#1642
,
|
|
|
|
Цитата Romkin @ А вот если просто передавать указатель на класс, то информация о типе не передается, об этом и речь. Если ты имел ввиду указатель на объект(или ссылка, как это у вас принято называть), то информация о типе ещё как передаётся. Цитата Romkin @ Автоматически - можно, конечно. Вопрос в том - когда присваивать. Во время компиляции? Как давать в каждом билде один и тот же IID? Ну в .NET как-то это делается же . |
|
Сообщ.
#1643
,
|
|
|
|
Цитата AndNot @ И сколько же телодвижений в с++ нужно сделать для подобного результата? Элементарно s := "foo"+"bar"+t+"rulez!" А теперь прикинь, сколько телодвижений нужно сделать в Си, для подобного результата Или так: if s <> "foo" then ..... ..... if s = t then ...... Это я и называю удобной работой со строками |
|
Сообщ.
#1644
,
|
|
|
|
Цитата archimed7592 @ Просто я использую наиболее подходящую реализацию. К примеру, в рамках Qt логично использовать QString. Угу. В рамках MFC CString кажется? А в рамках другой библиотеки - другой тип... Вот это я и называю изобретать велосипед: вместо единого типа, которым пользуются все - в каждой библиотеке свой велосипед со своими заморочками. А тем, что есть, asciiz - не пользуются. Взять хоть тот же QString: вроде бы чистая абстракция, но там есть подсчет ссылок, и, соответсвенно, особенности при использовании в потоках. В другой библиотеке у тебя, скорее всего, будет другой тип с другим поведением. И постоянно надо учить, как себя ведет в данной библиотеке данный объект, который представляет всего лишь строку! |
|
Сообщ.
#1645
,
|
|
|
|
Цитата А вот если просто передавать указатель на класс, то информация о типе не передается, об этом и речь. Либо теперь уже я тебя не правильно понял, либо - передается. Тут проблема в том, что библиотеки компилируются раздельно и независимо друг от друга, поэтому каждый экземпляр обладает своей версией RTTI. Т.е. класс TFoo в двух разных DLL - это разные классы с точки зрения рантайма. Даже если они бинарно идентичны. Но могут и различаться, поэтому динамический тайпкаст делается только в пределах данного программного модуля. Думаю, ты это и без меня прекрасно понимаешь Кстати, сделать межмодульный тайпкаст ручками можно. |
|
Сообщ.
#1646
,
|
|
|
|
Цитата archimed7592 @ Ну в .NET как-то это делается же Там проще: можно сказать, единый RTTI для всех. |
|
Сообщ.
#1647
,
|
|
|
|
Цитата AndNot @ А теперь прикинь, сколько телодвижений нужно сделать в Си, для подобного результата Или так:Так, поднимаешь взор на заголовок браузера и видишь "Delphi vs C++". ![]() ![]() s = string() + "foo" + "bar" + t + "..."; if (s != "foo") ; if (s == "foo") ; // и даже relational if (s1 < s2) ; if (s1 <= s2) ; // etc. |
|
Сообщ.
#1648
,
|
|
|
|
Цитата Да ничего меня не интересует. Просто я использую наиболее подходящую реализацию. Значит меня тоже не интересует реализация идентификаторов для интерфейсов Я просто сам назначаю этот идентификатор. Ведь получается то же самое - там где программист должен что-то сам ручками задавать - значит поведение непрозрачно.Цитата Null Terminated Byte String. В С++ не используются? А в C? А тебе известно, что C++ был придуман через 10 лет после Паскаля? Вот я и говорю, что в более старой литературе такой тип строк называю Pascal-строками, так как именно отсюда ноги растут |
|
Сообщ.
#1649
,
|
|
|
|
Цитата --Ins-- @ Либо теперь уже я тебя не правильно понял, либо - передается. Тут проблема в том, что библиотеки компилируются раздельно и независимо друг от друга, поэтому каждый экземпляр обладает своей версией RTTI. Собственно, я говорил именно об этом Тип-то выяснить можешь, но это не тот, что у тебя есть. В С++, насколько я знаю, делаются dll, которые являются аналогом bpl: в экспорт идет все из заголовков. |
|
Сообщ.
#1650
,
|
|
|
|
Цитата Romkin @ Угу. В рамках MFC CString кажется? А в рамках другой библиотеки - другой тип... Вот это я и называю изобретать велосипед: вместо единого типа, которым пользуются все - в каждой библиотеке свой велосипед со своими заморочками. А тем, что есть, asciiz - не пользуются. Not exactly. Right tool for the right job /Цитата Romkin @ Взять хоть тот же QString: вроде бы чистая абстракция, но там есть подсчет ссылок, и, соответсвенно, особенности при использовании в потоках. Правда что ль? Какие такие особенности? Добавлено Цитата Romkin @ Там проще: можно сказать, единый RTTI для всех. А у вас разный что ль? А почему? Потому что ваш с COM не совместим был что ль? Цитата --Ins-- @ Я просто сам назначаю этот идентификатор. Да ты объясни мне, нахрена его назначать то? Вот возьми Java - не так давно wind озвучивал немалые цифры о кол-ве интерфейсов/классов в крупных проектах. Я точно не припомню, но мне даже для сотни(а там что-то вроде десятков тысяч было) интерфейсов было бы лень эти IID'ы назначать. |