
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.52] |
![]() |
|
Страницы: (117) « Первая ... 108 109 [110] 111 112 ... 116 117 ( Перейти к последнему сообщению ) |
Сообщ.
#1636
,
|
|
|
Цитата Это не аргумент . Волков бояццо - в лес не ходить . Как раз таки контроль на стороне компилятора и языка - это наиболее правильный подход, и он был заложен Виртом в язык изначально и умышленно. Чтобы приучать программиста к дисциплине, а не к вседозволенности. Кстати, в той же вики, отстутствие такой возможности в C++ приписывают именно к недостаткам языка (самый первый) ![]() Добавлено Цитата Только, в отличии от Delphi-программистов я могу выбрать реализацию от STLport, стандартную, реализацию от Qt, из ICU и т.д. Значит - интересуют ![]() |
![]() |
Сообщ.
#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. Собственно, я говорил именно об этом ![]() |
![]() |
Сообщ.
#1650
,
|
|
Цитата Romkin @ Угу. В рамках MFC CString кажется? А в рамках другой библиотеки - другой тип... Вот это я и называю изобретать велосипед: вместо единого типа, которым пользуются все - в каждой библиотеке свой велосипед со своими заморочками. А тем, что есть, asciiz - не пользуются. Not exactly. Right tool for the right job ![]() Цитата Romkin @ Взять хоть тот же QString: вроде бы чистая абстракция, но там есть подсчет ссылок, и, соответсвенно, особенности при использовании в потоках. Правда что ль? Какие такие особенности? ![]() Добавлено Цитата Romkin @ Там проще: можно сказать, единый RTTI для всех. А у вас разный что ль? А почему? Потому что ваш с COM не совместим был что ль? ![]() Цитата --Ins-- @ Я просто сам назначаю этот идентификатор. Да ты объясни мне, нахрена его назначать то? Вот возьми Java - не так давно wind озвучивал немалые цифры о кол-ве интерфейсов/классов в крупных проектах. Я точно не припомню, но мне даже для сотни(а там что-то вроде десятков тысяч было) интерфейсов было бы лень эти IID'ы назначать. |