|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
06.09.2011, 08:25 | #11 | |||
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
Цитата:
В шарпе есть ICollection, IList, IEnumerable,... которые покрывают основную часть коллекций и благодаря которым не приходится нигде строить непонятные конструкции. Сторонние библиотеки стыкуются отлично посредством интерфейсов. Если бы таких интерфейсов не было изначально в .NET, тогда был бы такой же зоопарк, как в плюсах. В жабе ситуация примерно как в шарпе и она собственно должна быть такой в современном языке. В плюсах же реализация основных коллекций из коробки (в STL) есть, но нормально это всё не расширяется. Если мне нужно будет "изобрести" какую-то свою особую коллекцию, то так просто я её в код, заточенный под vector, не засуну. Нужно будет сначала собрать экземпляр вектора. Цитата:
Цитата:
Тут конечно же оно каждому своё. Лично мне такая ситуация не по душе и, судя по вакансиям, не одному мне |
|||
06.09.2011, 08:46 | #12 | ||
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
Цитата:
Цитата:
Ну в принципе верно, тут уже больше связано с областью применения, тот же Android (я с ним имею дело, хотя сам пока писал только на SDK без NDK), там весь верхний слой на Java, хотя можно в тех же играх для увеличения производительности использовать NDK -> C++. Но там думаю или он чистый и использует обвертки от NDK. Я хочу сказать, что тут думаю, кому уже как повезет. Главное что выход есть было бы плохо если бы выхода не было. |
||
06.09.2011, 08:56 | #13 | |
Участник клуба
Регистрация: 04.04.2010
Сообщений: 1,554
|
BOBAH13
Цитата:
|
|
06.09.2011, 09:40 | #14 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
А я и не говорю, что это преимущество. Просто говорю, что есть выход раз так все закручено становится.
|
06.09.2011, 10:17 | #15 |
Software Engineer
Участник клуба
Регистрация: 07.04.2007
Сообщений: 1,618
|
Проблемы использования нескольких сторонних библиотек в проекте возникают, потому что код этих библиотек расползается по всему проекту, и везде приходится делать всевозможные конвертации для различных библиотек. Так быть не должно. Использование каждый библиотеки (и любых не стандартных средств) должно быть локализовано в одном пакете, а в других местах должны работать собственные обертки\интерфейсы. То есть, если нам нужна QtGUI, мы не должны во всем проекте использовать сущности из Qt, мы должны написать интерфейс и использовать его. Это решает и другую очень важную проблему - если через год мы захотим использовать вместо Qt что-то другое, нам придется исправить только реализацию интерфейса, а не половину проекта
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
|
06.09.2011, 10:23 | #16 | |
C++,DirectX/OpenGL
Форумчанин
Регистрация: 09.01.2011
Сообщений: 422
|
Цитата:
Часть функций/классов из Boost перейдет в новый стандарт C++. Qt - это вообще для кросс платформенных разработок. C++ является одним из самых быстрых языков по времени исполнения кода(практически равно коду на ассемблере) и хочется, чтобы он таким и оставался, по-этому и комитет стандартизации только принимает быстрые и удобные решения, а всё остальное отсекается. Чем отличается "сишный массив" от "несишного" ? |
|
06.09.2011, 10:53 | #17 | |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
Цитата:
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика Последний раз редактировалось Utkin; 06.09.2011 в 10:57. |
|
06.09.2011, 11:09 | #18 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
именно Сишные массивы и строки, есть дефакто стандарт(для кроссбиблиотечного обмена например), остальное по большей части внутреннее для ЯП.
теже строки в Делфи отлично преобразуются в сишные, причем на практике без реального изменения(копии), тоже и с массивами. так же и std::vector(C++)!=array(delphi) Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
06.09.2011, 11:48 | #19 | |||
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
Цитата:
Цитата:
У меня есть некий алгоритм, который работает с коллекцией неких данных. Этот алгоритм хорошо ложится на список list. Так же есть сторонняя библиотека, которая собственно выдаёт исходные данные. Только вот беда: она работает или с MyData* или с vector<MyData>. В итоге я должен сначала создать Си-шный массив или вектор, потом на основе этого создать уже list и тогда мой алгоритм сможет приступить к работе. Только вот для заполнения данных в коллекцию этой сторонней библиотеке без разницы должно быть куда я хочу помещать данные. Я хочу передать ей некий ICollection и пусть она его заполняет. А уже в конкретных местах под этим интерфейсом будет скрываться вектор, список или что будет удобнее в данный момент. Так же весело с Си-шными массивами. Говоришь функции: заполни мой массив данными, но я выделил память только под 100 элементов. В итоге функция отвечает: я заполнила твой массив, но памяти под все данные не хватило, поэтому давай-ка ты выделишь памяти побольше и вызовешь меня еще раз. И хорошо если предусмотрена функция, возвращающая количество данных, чтобы можно было заранее выделить нужный объем данных и эта "фича" для этого не нагружает сервер "холостым" запросом к БД. А потом еще окажется, что другой пользователь успел добавить новую запись и твоих выделенных байт опять не хватает, хотя ты только что проверял. Это всё безусловно решается и не является какой-то трагедией, но мне лично не хочется даже думать о такой фигне. Расскажите это разработчикам интернациональных приложений, которым без юникода ну никак нельзя. Дальше делфисты давно перешли на юникод по умолчанию. Нормальной работы с кодировками из коробки в плюсах помойму так же до сих пор нет? Сначала эти функции висят в пространстве boost, потом пару лет в tr1, а потом может быть перекочуют в std. Так? Цитата:
Си-шный массив небезопасен. Он не хранит размер и уже от этого куча проблем может возникнуть. Поэтому обычно их заполнение выглядит так: int fill_array(byte *arr, int size); на входе получаем: arr - выделенный кусок памяти под массив size - количество элементов, под которое выделен массив на выходе получаем количество заполненных элементов массива. Хорошо - если это количество не равно параметру size. Если же равно: просто так удачно совпало по числу элементов или же памяти выделенной не хватило? |
|||
06.09.2011, 11:58 | #20 | |||
Eclipse Foundation
Старожил
Регистрация: 19.09.2007
Сообщений: 2,604
|
Цитата:
Ну да Qt - только для кроссплатформенных разработок. Никак иначе его использовать нельзя. Цитата:
Цитата:
Код:
Код:
Чего только стоит библиотека ACE/TAO (кто работал, тот знает). Там вообще мрак. |
|||
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Продолжение калькулятора) | Asdprom | Общие вопросы C/C++ | 5 | 17.03.2011 19:04 |
КЛАССЫ В С++ (продолжение) | kolyan_zver | Общие вопросы C/C++ | 3 | 26.09.2010 01:37 |
Приостановка\продолжение потока | bulldog5293 | Общие вопросы Delphi | 6 | 20.09.2010 21:47 |
Условие на продолжение | iHikita | Общие вопросы .NET | 7 | 26.08.2010 14:27 |
Заполнение бланков (продолжение) | kzld | Microsoft Office Excel | 8 | 28.07.2009 17:19 |