|
|
|
C++ & Java
|
|||
|---|---|---|---|
|
#18+
а можете вы написать контейнер, в котором могут хранится как функции так и методы? Напишите. Потом я кину пару своих строчек - сравним, что безопасней и понятней. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2004, 16:10 |
|
||
|
C++ & Java
|
|||
|---|---|---|---|
|
#18+
dwl- насчет "среда сама сформирует" - не все среда может сама сформировать. Пусть вам среда "сама напишет" алгоритм удаления (недавно на форуме написал) из строки пробелов заключенных в двойные кавычки. это так фигня. - а может ваща "среда" написать мультиметод? если вы канчно знаете что это такое. Насколько я помню, Скотта Мейерса очень тяготила необходимость перекомпилировать все классы, после того как в его демо-программе, эмулирующей мультиметоды, появляется новая сущность. Если же мы для мультиметодов будем использовать Александреску-вские технологии, то о раздельной компиляции по видимому придется забыть. dwl - а может ваша суперсреда спрограммирует за вас анонимные методы? - в Яве насколько я знаю нету делегатов. Что нужно нажать в вашей среде чтобы они там появились? Все это спокойно можно сделать с помощью интерфейсов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2004, 17:02 |
|
||
|
C++ & Java
|
|||
|---|---|---|---|
|
#18+
вы не говорите что это фигня и что можно сделать - вы сделайте. я потом приведу код на шаблонах, чтобы продемострировать разницу. Чего вы боитесь? Или вы только лозунги выдвигаете необоснованные, вернее основанные на слухах и домыслах. Переиначенные и перевранные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2004, 18:15 |
|
||
|
C++ & Java
|
|||
|---|---|---|---|
|
#18+
dwl Напишите контейнер на Яве, КОТОРОМУ БЫЛО БЫ ПОФИГ какой тип хранить. и вам сможете сделать только две вещи: 1) взять какой-нить аналог variant и писать массив для него. НУЛЕВАЯ ПРОВЕРКА ТИПОВ 2) взять какой-нить класс от которого наследуют все остальные классы вашей проги. Но тогда для вызова неполиморфных методов вам придется проверять на тип и вызвать при правильном преобразовании типа нужный метод. ХА. но это все делается в рантайм. Шаблоны лучше и это очевидно. Лишним доказательством этого является тот факт, что даже в Java в последнем JDK добавили шаблоны (в язык). Мотивайцией было именно это - чтобы иметь возможность хранить в коллекциях типизированные (ссылки на) объекты, а не абстрактные Object-ы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2004, 18:31 |
|
||
|
C++ & Java
|
|||
|---|---|---|---|
|
#18+
dwlвы не говорите что это фигня и что можно сделать - вы сделайте. я потом приведу код на шаблонах, чтобы продемострировать разницу. Чего вы боитесь? Или вы только лозунги выдвигаете необоснованные, вернее основанные на слухах и домыслах. Переиначенные и перевранные. Делегат - это типа указателя на функцию? В Java его обычно так делают: Код: Java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2004, 19:58 |
|
||
|
C++ & Java
|
|||
|---|---|---|---|
|
#18+
MasterZivЛишним доказательством этого является тот факт, что даже в Java в последнем JDK добавили шаблоны (в язык). Мотивайцией было именно это - чтобы иметь возможность хранить в коллекциях типизированные (ссылки на) объекты, а не абстрактные Object-ы. Чего-то мне непонятно, почему С++-иды стали такими фанатами строгой типизации. Уж и до смешного доходит - std::allocator<T>::allocate возвращает T*, а не void*. Хотя, если нормально подумать - ведь он возвращает указатель на сырую память, следовательно он не имеет права возвращать T* ! Хлеб нашей организации - это несклько монструозных программ на С++, и шаблоны и STL там нигде не используется. Огромные иерархии классов по 40 уровней, из которых первые 7 - абстрактные, тот же downcasting. Все отлично бегает. У Страуса и Александреску парадигма может и красивая в чем-то, но непрактично это. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2004, 20:12 |
|
||
|
C++ & Java
|
|||
|---|---|---|---|
|
#18+
авторХотя, если нормально подумать - ведь он возвращает указатель на сырую память Хотя, если подумать, все указатели суть указатели на сырую память :) Всё остальное делаётся по смещению. автори шаблоны и STL там нигде не используется. Это не значит, что они вообще нигде в мире не используются. Область средств программной разработки - это как эволюция. Если кому-нибудь что-то для чего-то надо, оно появляется и приживается, если нет - оно отмирает. Есть шаблоны - раз они не отмерли - значит это кому-то надо. Раз они появились в Яве, значит и в Яве это надо. И я вообще не понял сабжа. Ладно ещё сравнивать С и С++. Но Яву-то что сравнивать с Сями? Два разных языка - две разные области применения. Никто же не станет писать виндовое приложение на Яве? И никто не станет писать апплет для веба на сях? А если кто-то станет, то он сам себе враг :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2004, 07:22 |
|
||
|
C++ & Java
|
|||
|---|---|---|---|
|
#18+
Сергей ИльичДелегат - это типа указателя на функцию? В Java его обычно так делают: код понятен. Уточняю делегат - это указатель скорее на функтор в понятии С++, то есть это может быть как указателем на функцию, так и указателем на метод. Делегаты в C# еще из себя представляют коллекции таких указателей, которые вызываются в порядке следования. теперь посмотрим как это можно сделать в С++. Это будет безопасней( с точки зрения контроля типов) и удобней. Потому как в вашем случае вы можете опираться только на одну сигнатуру. Сделать же контейнер из делегатов разных сигнатур у вас не получится. Если только не прибегать опять к множественным преобразованиям типов. Итак в С++ помимо удобного bind есть такой классный шаблончик, как function<T>. Аргумент шаблона здесь это сигнатура функции. Т.е. мы имеем в своем распоряжении класс, реализация которого для функци и методов не зависит от оных помимо строгой проверки типов. Пример Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. onClick я могу присвоить любую другую функцию возвращающую void без аргументов. Как видно из кода, классу можно присваивать как обычные функции так и методы классов с такой же сигнатурой. Не сотавит труда написать и следующее vector< function<void> >, т.о. мы будем иметь несколько указателей, для последовательного их вызова. который может выглядеть так Код: plaintext 1. самое главное. мне не надо по сто раз писать ОДИН и ТОТ ЖЕ код для разных типов callback функций. Суть generic programming состоит в том, чтобы также как в ООП увеличить удобства повторного использования кода и сделать это БЕЗОПАСНО. Для того чтобы изменить сигнатуру вызова callback функции изминения в случае с шаблонами минимальны, сохраняя главное условие СТРОГОЙ СТАТИЧЕСКОЙ проверки типов. а теперь скажите мне: 1) Это такой сложный код, который я привел? Он опасен с точки зрения проверки типов? 2) если бы у вас был контейнер callback функций с множественными преобразованиями типов, то в случае с изминением типа callback-функтора ругался бы ваш компилер на все места, где нужно сделать изминения? НЕТ. В случае с шаблонами компилятор не даст вам пропустить ни одного некорректного использования типов. Скажите разве это плохо? НЕТ! Это отлично. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2004, 08:19 |
|
||
|
C++ & Java
|
|||
|---|---|---|---|
|
#18+
относительно вашего полного непонимания книг Александреску. Вы конечно вправе иметь свое мнение, но оно больше смахивает на высказывания желтой прессы, которая не желает разбираться в том, что ей показывают. Она лишь делает "сенсационно"-крекливые возгласы, имеющие только одну цель - никакой разумности, главное взбудоражить. Будьте последовательны. Давайте начнем с конструктива. Самый простой и часто используемый мной и моими друзьями, да и многим другими программистами, прием называемый СТРАТЕГИЯ. Скажите, что вам в нем не нравится? И почему вы считаете что он не имеет практического использования. Приведите пожалуста КОНКРЕТНЫЕ фрагменты кода это демонстрирующие в не просто голословные фразы типа: "Я ни разу его не использвал, значит он не нужен!" Вопросик другой более сложный, скажите а вы знаете что такое фабрика объектов? Абстрастрактная фабрика? Вы считаете, что это не имеет практического использования? Или вы считаете, что реализация Александреску не подходит? Почему? укажите конкретные примеры. Желательно со ссылками на паттерн Фабрики(см.Гамму) а также с примерами кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2004, 08:26 |
|
||
|
C++ & Java
|
|||
|---|---|---|---|
|
#18+
авторкод понятен.... Блин, надо же... я про boost не знал... В msdn-е не увидел... Где почитать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2004, 11:17 |
|
||
|
C++ & Java
|
|||
|---|---|---|---|
|
#18+
www.boost.org - в большинстве своем будет включен в новый стандарт С++. уже есть в MSVC 2005 и MSDN 2005. В бусте реализованы многие приемы, которые описывал Александреску. Желающие воспользоваться только этими приемами могут найти библиотеку LOKI на сорцфорж. Но в бусте например гораздо лучше и богаче реализованы аллокаторы и функции выделения памяти для маленьких и средних объектов. Так например там есть выделение памяти для синглтонов. Но в тоже время boost не имеет реализации мультиметодов и генерации иерархий для фабрик. Хотя список типов в boost имеется mpl::vector. В локи также имеется очень удобная и гибкая реализация фабрики, абстрактной фабрики, rtti оболочки, синглтон-холдер с выбором стратегии уничтожения и оживления, ну и конечно визитер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2004, 12:34 |
|
||
|
C++ & Java
|
|||
|---|---|---|---|
|
#18+
dwlкод понятен. Уточняю делегат - это указатель скорее на функтор в понятии С++, то есть это может быть как указателем на функцию, так и указателем на метод. Концептуально сложно. Зачем нужны функции и методы? Почему не одни методы? dwl теперь посмотрим как это можно сделать в С++. Это будет безопасней( с точки зрения контроля типов) и удобней. Про "безопасней" не надо - в моем примере вообще нет преобразований типов. Один, пользуясь твоей терминологией "строгий контроль". Про "удобней" тоже не надо. Это соберется компилятором javac из любой JDK и не потребует доп. библиотек. Твой пример вообще не соберется MSVC 6, может быть соберется MSVC7.0 (не отвечаю) и наверное, одним из свежих g++. И еще надо скачивать и инсталлировать boost. Про размер бинари - это тоже хороший вопрос. Мой пример займет несколько килобайт, твой - возможно несколько десятков или сотен килобайт. dwl Потому как в вашем случае вы можете опираться только на одну сигнатуру. Сделать же контейнер из делегатов разных сигнатур у вас не получится. Если только не прибегать опять к множественным преобразованиям типов. Ковыряние в носу. Заметь, тут нет никакого преобразования типов. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. dwl а теперь скажите мне: 1) Это такой сложный код, который я привел? Он опасен с точки зрения проверки типов? Концептуально довольно сложный. С точки зрения проверки типов очень опасен, поскольку если там где-нибудь будет неподходящий тип, то появится столько ошибок, что будет проще его переписать, чем разобраться "что же не так" ? dwl 2) если бы у вас был контейнер callback функций с множественными преобразованиями типов, то в случае с изминением типа callback-функтора ругался бы ваш компилер на все места, где нужно сделать изминения? НЕТ. Дальше мы не поняли чего вы пытались сказать. Все design patterns элементарно реализуются на Джаве, и никаких четырехэтажных шаблонов там не надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2004, 12:40 |
|
||
|
C++ & Java
|
|||
|---|---|---|---|
|
#18+
сергей ильич imho, отличие вашего кода и dwl в том, что вы окончательно присваиваете playbutton & stopbutton соответствующие методы при декларации класса player, а у dwl возможно переназначение этих методов в дальнейшем. если я ошибаюсь, поправьте, plz. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2004, 13:11 |
|
||
|
C++ & Java
|
|||
|---|---|---|---|
|
#18+
Сергей Ильич Зачем нужны функции и методы? Почему не одни методы? таково уж определение делегата. не я его выдумал. Сергей ИльичТвой пример вообще не соберется MSVC 6 надо же! только что собрал под MSVC 6. видимо мы живем в разных мирах. Сергей ИльичКовыряние в носу. Это практическая необходимость. Именно так работают делегаты C#. Код: plaintext 1. 2. 3. 4. 5. Сергей ИльичКонцептуально довольно сложный. С точки зрения проверки типов очень опасен, поскольку если там где-нибудь будет неподходящий тип, то появится столько ошибок, что будет проще его переписать, чем разобраться "что же не так" ? Я приблизительно так и думал что вы ответите. 1) можно поподробней в чем его КОНЦЕПТУАЛЬНАЯ сложность. с примерами кода. а то вы льете много воды не подтвержденой словами. 2) ошибок будет несколько вы правы. но насчет разобраться увы не так. все легко читается и исправляется. Это лучше чем лазить отладчиком и смотреть где какое преобразование типов неверно. Вы везде используйте ложные постулаты о том что ТО-ТО и ТО-ТО черезвычайно замочрочено. Это неверный подход. Хотя бы потому что это не является правдой. вам видимо сложно понять подход generic programming, но его суть состоит и в том числе в отвлечении алгоритмов от типов операндов при сохранении строгой типизации. Как в случае с контейнерами. Я рад за программистов Явы и C#, что у них тоже появились generic. Это сильно облегчит им работу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2004, 13:22 |
|
||
|
C++ & Java
|
|||
|---|---|---|---|
|
#18+
Вот полный список компиляторов, на которых ставится boost Borland C++, Comeau C++ (win, non win), Metrowerks CodeWarrior Pro 6.x, 7.x, 8.x, and 9.x, GCC, Digital Mars C++, Edison Design Group, GNU GCC, Intel C++ for Linux, Intel C++ for Windows, KAI C++, Borland C++ for Linux (Kylix), MinGW, SGI MIPSpro C and C++, Microsoft Visual C++ version 6, 7, 7.1 (в SMVC 2005 включан фициально), SunPRO C++, Compaq C++ for Tru64 Version 6.5 and less, IBM Visual Age C++ Это еще в опровержении ваших поспешных высказываний. Кстати относительно ваших поспешных высказываний, вы так и не ответили про книгу Александреску. Я вам задал пару наводящих вопросов. Делаем выводы... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2004, 13:46 |
|
||
|
C++ & Java
|
|||
|---|---|---|---|
|
#18+
dwl Сергей ИльичТвой пример вообще не соберется MSVC 6 надо же! только что собрал под MSVC 6. видимо мы живем в разных мирах. [/quot] MSVC 6 довольно слабо поддерживает стандарт. Готов ли ты нести ответственность за поведение boost в этих условиях ? dwl {--- SKIP ---} Вобчем, я так понял на яве нельзя написать контейнер для указателей на метод или функцию. На любую. Интересно глянуть как вы будете реализовывать удаление типа из списка callback методов. В нижеуказанном примере используется downcasting. Но фича в том, что в контейнер *невозможно* положить сущность неправильного типа, не используя reflection или JNI. И это отслеживается статически. К тому же я это сделал потоковобезопасным: нельзя добавить иди удалить обработчик во время рассылки. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. dwl Я приблизительно так и думал что вы ответите. Значит проблема действительно есть. У Скотта Мейерса в Effective STL есть даже целая глава "расшифровывание ошибок в STL" . Где - то даже были тулзы для того чтобы эти ошибки парсить. dwl 1) можно поподробней в чем его КОНЦЕПТУАЛЬНАЯ сложность. с примерами кода. а то вы льете много воды не подтвержденой словами. Слишком много сущностей. dwl Я рад за программистов Явы и C#, что у них тоже появились generic. Это сильно облегчит им работу. Generics в Жаве появились ужедавно. Про шаблоны... Не знаю, не смотрел я JDK 1.5 . Но там шаблонный класс вроде можно раздельно скомпилировать раз и навсегда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2004, 14:52 |
|
||
|
C++ & Java
|
|||
|---|---|---|---|
|
#18+
Сергей ИльичMSVC 6 довольно слабо поддерживает стандарт. Готов ли ты нести ответственность за поведение boost в этих условиях ? ну во-первых готов. Во-вторых это ответственность на самом деле несут разработчики буста. С самого ее первого появления она дружила с MSVC 6. И до появления 7.1 я спокойно юзал буст на шестерке. Никаких нареканий. Сергей ИльичНо фича в том, что в контейнер *невозможно* положить сущность неправильного типа, не используя reflection или JNI ктож спорит. я о другом. о том, что благодаря шаблонам я пишут ОДИН КЛАСС, который отвечает за использование callback функций и методов. Я полностью инкапсулирую все что мне нужно для этого класса. Ну там вызовы виртуальных функций (указатели на функцию или метод этого делать не могут), операции сравнения и т.д. Я делаю эту работу один раз. Далее я оформляю это в качестве шаблона. И в коде, потом просто указываю нужную сигнатуру. ВСЕ! Это как раз УМЕНЬШЕНИЕ СУЩНОСТЕЙ. Потому что мне не надо пложить классы для функций с другими сигнатурами. Понимаете, нет? аналогично с контейнером. я беру vector и передаю ему нужный тип. мне не надо беспокоится о выделении памяти, синхронизации и прочее. Тот же прием. Мне не надо писать массив или копировать из другого файла что-то - УВЕЛИЧИВАЯ СУЩНОСТИ. я использую ОТЛАДЕННЫЙ КОД. Безопасно использую без всяких преобразований типов. Сергей ИльичСлишком много сущностей. не больше чем в вашем варианте. Если вас так смущает ПРОСТЕЙШИЙ bind, то можно вместо boost::function написать boost::mem_fn. И код менять ОСОБО не надо, только убрав BIND. Просто в случае с function мы можем использовать не только методы, но обычные функции или СТАТИЧЕСКИЕ МЕТОДЫ. В вашем варианте такое совместное использование не возможно. Это(тип функтора) можно убрать в typedef, это можно спрятать в стратегию. Сущностей будет еще меньше. И код мне не придется почти менять. И читабельность не пострадает. Вы ИМХО предвзяты ОЧЕНЬ. Более подробно относительно УМЕНЬШЕНИЯ СУЩНОСТЕЙ см выше. Теперь относительно больших сообщений обшибках, за которые вы ухватились как за соломинку бросив все остальное. Если посмотреть мое сообщение в этой ветке но страницей раньше, я уже сказал что все это флейм. Я написал, что помимо ООП есть generic programming и многие с ним не знакомы. Привычки выработанные годами вызвают бурю эмоций отторжения, которые зачастую ничем другим не мотивированны. Этим и объясняется большое колво ЛОЖНЫХ данных, которые даются о С++. Происходит как бы ИДЕОЛОГИЧЕСКОЕ ЗАПУГИВАНИЕ, особенно тех кто не знает что такое generic programming. Всему можно научится но обсуждать это в сравнении с принципиально другим языком - это флейм. так же я написал, что не считаю С++ идеальным языком. Как и любой другой язык и уж тем более яву. Но, во-первых это не дает право никому на ОБОБЩЕНИЯ. и, во-вторых, надо помнить о оптимальных решениях, когда кол-во плюсов, который дает инструмент превышает кол-во минусов. В той или иной ситуации. Да, редко но случается большой дамп ошибок. ОН связан с глубиной иерархии шаблонного класса. Т.е. один класс инстанцирует другой, тот третий и т.д. и ВЕСЬ СТРАХ-ТО в том что компилятор печатает полное имя класса, которое получается нехилым. Страшно ли это? Да нет. я бы не назвал это армаггедоном. 1) умело проектируйте классы и используйте их с умом 2) есть такая штучка concept_check, которая в сочетании с static_assert побеждает этого зверя достаточно легко. Вы можете придумать свое сообщение об ошибке и ограничит глубину проверки. Используя те же шаблоны. Оба этих шаблона есть в boost, достаточно подробное их описание имеется у Александреску. 3) это была беда древних компилеров, теперь в большинстве своем они печатают сообщения более сжато, как бы ступенчато. Итак, это происходит редко, это можно обойти, и это не ПЕРЕВЕШИВАЕТ кол-во ПЛЮСОВ использования шаблонов. ЗЫЖ нучто ж. с контейнером функторов выяснили? вы поняли что вам придется пложить сущности в отличии от шаблонов? могу предложить еще задачку - анонимные методы. 8-)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2004, 15:58 |
|
||
|
C++ & Java
|
|||
|---|---|---|---|
|
#18+
MSVC 6 довольно слабо поддерживает стандарт. Готов ли ты нести ответственность за поведение boost в этих условиях ? boost под MSVC 6.0 адаптирован и работает, несмотря на то, что действительно со стандартом в 6.0 плоховато. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2004, 16:53 |
|
||
|
C++ & Java
|
|||
|---|---|---|---|
|
#18+
Сергей Ильич Чего-то мне непонятно, почему С++-иды стали такими фанатами строгой типизации. Уж и до смешного доходит - std::allocator<T>::allocate возвращает T*, а не void*. Хотя, если нормально подумать - ведь он возвращает указатель на сырую память, следовательно он не имеет права возвращать T* ! С++, вообще-то, язык со строгой типизацией (не путать с языком С). Что до типизированных коллекций - ну это просто ОЧЕНЬ СИЛЬНО практичнее, чем коллекции Object(*), иначе Sun в ряд ли "подвинулась" бы на изменение языка. Что до std::allocator - пример неудачный, потому что и класс неудачный. Считайте , что нет в stl allocator-а вообще, и вам, возможно, станет легче (понимать , что язык C++ - один из величайших из всех придуманных языков программирования ). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2004, 17:02 |
|
||
|
C++ & Java
|
|||
|---|---|---|---|
|
#18+
SiebenteWerk Никто же не станет писать виндовое приложение на Яве? Ой, пишут, гады, представляешь ? Пишут. SiebenteWerk И никто не станет писать апплет для веба на сях? А если кто-то станет, то он сам себе враг :) Ну а про этих уже кажеться счастливо все забыли. И слава Богу! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2004, 17:05 |
|
||
|
C++ & Java
|
|||
|---|---|---|---|
|
#18+
dwl Сергей ИльичMSVC 6 довольно слабо поддерживает стандарт. Готов ли ты нести ответственность за поведение boost в этих условиях ? ну во-первых готов. Во-вторых это ответственность на самом деле несут разработчики буста. С самого ее первого появления она дружила с MSVC 6. И до появления 7.1 я спокойно юзал буст на шестерке. Никаких нареканий. А она кидает исключения? А будет ли утечка памяти, если исключение выкинуто из конструктора? А если я хочу компилировать без исключений ? А она потоково - безопасна? А если мне 1) нужна многопоточность? 2) не нужна многопоточность, но нужна скорость? dwl я о другом. о том, что благодаря шаблонам я пишут ОДИН КЛАСС, который отвечает за использование callback функций и методов. А если обобщенному классу A нужен обобщенный класс В, а обобщенному классу B нужен обобщенный класс A? В каком порядке мы расположим инклюды? Если бы мы могли разделить декларацию и имплементацию, мы бы пожалуй поместили опережающие декларации в A.hpp и B.hpp, а реализации - в A.cpp и B.cpp. Но в MSVC так с шаблонами делать нельзя. dwl Потому что мне не надо пложить классы для функций с другими сигнатурами. Понимаете, нет? Почему бы и не поплодить. Ведь в Java есть пакеты. По крайней мере я 100% знаю, что мне в качестве параметра будут передавать org.sergey.ilyich.sql-forum-conversation.Listener, а не какую-то сигнатуру. dwl Вы ИМХО предвзяты ОЧЕНЬ. Привычки выработанные годами вызвают бурю эмоций отторжения Происходит как бы ИДЕОЛОГИЧЕСКОЕ ЗАПУГИВАНИЕ ВЕСЬ СТРАХ-ТО в том Пардон за оффтопик и переход на личности, но ты немного похож на одного Свидетеля Иеговы, с которым я как-то переписывался. Те же обороты. Не у них полемике учился? dwl функторов выяснили? вы поняли что вам придется пложить сущности в отличии от шаблонов? могу предложить еще задачку - анонимные методы. 8-)) Лямбда чтоли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2004, 17:10 |
|
||
|
C++ & Java
|
|||
|---|---|---|---|
|
#18+
Сергей Ильич А она кидает исключения? А будет ли утечка памяти, если исключение выкинуто из конструктора? А если я хочу компилировать без исключений ? А она потоково - безопасна? А если мне 1) нужна многопоточность? 2) не нужна многопоточность, но нужна скорость? 1) исключения в С++ никто не отменял, да кидает 2) про конструктор ваще смешно, стандартное раскручивание стека. никакой утечки памяти не бует. уничтожатся все объекты, кторые успели создаться. это стандарт. не только для буста. 3) если хотите без исключений ставьте опцию компилятора без исключений 4) да, буст потоково безопасна. многопоточность можно отключить. Сергей ИльичА если обобщенному классу A нужен обобщенный класс В, а обобщенному классу B нужен обобщенный класс A? конкретно, что вы имеете ввиду. если речь о форвардных декларациях в шаблонах они возможны. Сергей Ильич Но в MSVC так с шаблонами делать нельзя. я не знаю кто вам нашептывает на ушко. дайте кнкретный код, я его скомпилирую в MSVC. Сергей ИльичПочему бы и не поплодить. Ведь в Java есть пакеты. По крайней мере я 100% знаю, что мне в качестве параметра будут передавать org.sergey.ilyich.sql-forum-conversation.Listener, а не какую-то сигнатуру. да вы имеет право плодить сущности ради бога, я вас по рукам не бью. Однако меня вы очень рьбъяно и принципиально обвиняли в плодении сущностей. вы чертовски придирчивы и непоследовательны в своих высказываниях. не применяте свои же методы оценки к своим же методам решения. это идеализация. насчет свидетелей я не знаю таких. но вы просто стабильны в методах своих высказываний. на свои оговорки не смотрите ко мне придираетесь. плюсов о которых я говорю вы вообще не признаете путем игнорирования(см пример с "плодением сущностей"), как минусов с++. ляпнули что-то про книжку Александреску и отказались это объяснить. ушли просто убежали от обсуждения. не берете ответсвенность за слова. если я об этом буду молчать, останется только ваша ложь про с++. а ваши ассоциации - это ваши проблемы. меня они не волнуют. итог - не одного трезвого аргумента против использования шаблонов. Сергей ИльичЛямбда чтоли? ну наверное, я понятия не имею что вы конкретно подразумеваете под этим словом. опять возвращаясь к вашему любимому критерию, который два поста назад был для вас принципиальным, а теперь вы его отторгнули. я о кол-ве сущностей. 8-) анонимные методы, тоже ИНОГДА удобный способ не плодить чего-то понапрасну. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2004, 18:20 |
|
||
|
C++ & Java
|
|||
|---|---|---|---|
|
#18+
MasterZiv Лишним доказательством этого является тот факт, что даже в Java в последнем JDK добавили шаблоны (в язык). Мотивайцией было именно это - чтобы иметь возможность хранить в коллекциях типизированные (ссылки на) объекты, а не абстрактные Object-ы. Это не шаблоны. Совсем не шаблоны... я бы даже сказал ни разу не шаблоны... А жаль. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2004, 00:34 |
|
||
|
C++ & Java
|
|||
|---|---|---|---|
|
#18+
Достаточно восторженная статья о генериках в сравнении с шаблонами. без комментариев. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2004, 07:45 |
|
||
|
C++ & Java
|
|||
|---|---|---|---|
|
#18+
авторЗачем нужны функции и методы? Почему не одни методы? Не писал, видимо, никогда на сях. В Яве ни одна функция не может существовать сама по себе. В сях может, и это удобно, для классонезависимых приседаний. Например у меня одной функцией сделана работа дебага, со статических хэндлом окна, статическим указателем на файл и статическими флагами. Мне тут класс нафиг никакой не нужен, чё бы кто там про концептуальность и прочее не говорил. авторнадо же! только что собрал под MSVC 6. видимо мы живем в разных мирах. Ну у меня буст тоже не соберётся под VC60, ибо не поставлен. авторПро размер бинари - это тоже хороший вопрос. Мой пример займет несколько килобайт, твой - возможно несколько десятков или сотен килобайт. Звиняйте, ваш код - код для интерпретатора, а не бинарник. И работать, не смотря на малость, будет дольше. авторОй, пишут, гады, представляешь ? Пишут. Да, я подозревал, что такие есть. Они либо не умеют С. Либо страшные приверженцы Явы. Либо лучше держаться от них подальше - неясно, что у них на уме :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2004, 08:05 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=32848555&tid=2029679]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
70ms |
get topic data: |
8ms |
get forum data: |
3ms |
get page messages: |
68ms |
get tp. blocked users: |
1ms |
| others: | 233ms |
| total: | 409ms |

| 0 / 0 |
