Заблокирован
|
|||||||||||||||||||||
1 | |||||||||||||||||||||
Не хватает знаний. Не знаю, как на с++ реализовать возможность15.11.2011, 10:31. Показов 4083. Ответов 67
Метки нет (Все метки)
Есть одна вещь, которую у меня сделать никак не получается.
В моей старенькой 2008 студии отсутствуют стандартизированные интеллектуальные указатели. По этой причине я когда то написал собственные велосипеды для разных типов указателей. Вот так выглядит прототип метода, который загружает данные в сильнвй указатель (который умеет шариться)
Это нужно специально для того, что бы можно было обнулить аргумент. Вот так выглядит реализация метода:
Все это здорово, и прекрасно. Вот так это работает на практике:
Проблема в том, что я хочу сохранив инвариант сильного указателя, при этом иметь возможность написать вот так:
error C2664: TSharedPointer<TypeT>::TSharedPointer(TypeT *&): невозможно преобразовать параметр 1 из 'int *' в 'int *&' Вопрос: как сохранить возможность обнуления входящих указателей, но при этом иметь возможность скармливать интеллектуальному указателю оператор new ?
0
|
15.11.2011, 10:31 | |
Ответы с готовыми решениями:
67
Реализовать двусвязный список. В разных узлах одного списка может быть любой объект одного из допустимых типов (своих знаний не хватает) Выручайте, знаний не хватает Не хватает знаний. Выбор между ноутом и стационар Не могу сделать три задания, не хватает ещё знаний языка |
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|
16.11.2011, 07:16 | 42 |
http://www.stlport.org/ и гугл никто не запрещал.)
Меняй религию. Программист без знания буста никому не нужен. Не использовать буст это то же самое, что не использовать std::sort и прочие алгоритмы по тем же религиозным соображениям.
0
|
|
16.11.2011, 07:40
[ТС]
#43
|
Не по теме: Я даже и не знал о том, что std распространяется отдельно от компиляторов. Я думал что она распространяется так же примерно, как для студии - в виде паков. Во вторых, мне же её внедрить в студию. Я даже не знаю как объяснить то... что бы студия мне потом не кричала, что она там чего то найти не может. Я скачал какой то архив на 700 кб, что с ним делать дальше - хз. Я подозреваю, что повторяется такая же канитель, как и с бустом. Что бы установить эту версию стд придётся совершить целый ритуал непонятных движений. Такое добро мне даром не нужно. Вот не надо сравнивать стд и буст. Я ничего не хочу говорить пред рассудительного в адрес самого буста, что бы избежать ненужного холивара. Я лишь скажу, что уважаю тех людей, которые вложили столько сил, что бы создать поистине конгломерат библиотек. Получился такой увесистый тяжелый ящичек с инструментами на все случаи жизни. Но при этом ни одна сволочь не задумалась о том, что бы этим ящичком было удобно пользоваться. Ни одна сволочь не подумала о конечном пользователе. В итоге, что бы его просто тупо установить под студией в Виндовс - это такие усилия пользователю затратить придётся. Что это за отношение к пользователю? Вот пока создатели буста будут так наплевательски относится к пользователям, я не буду пользоваться их инструментами. Я буду пользоваться инструментами стд.
0
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|
16.11.2011, 07:52 | 44 |
Это не стандартный std, а portable. Т.е. не привязанный ник майкрософту, ни к студии, ни к виндосу. Поэтому и отдельно.
Я не говорю о всём бусте. Я даже не знаю названий и назначения половины библиотек из него. Однако, как минимум несколько библиотек просто необходимы абсолютно всем, практически всегда: различные виды интеллектуальных указателей и сериализация. Я просто не могу вспомнить ни одной программы. где бы мне хотя бы одной из бустовских библиотек не пришлось использовать. Конечно же, можно было и без них обойтись, но прописать путь я могу за 15 секунд, а вот реализовывать свою сериализацию придётся пару недель. Так что это вопрос хорошего тона и лени.
0
|
|
16.11.2011, 08:17
[ТС]
#45
|
Не по теме: У меня первая попытка поставить буст для студии совпала с первым чтением книги Александресску. Ну так вот, понять о чем пишет Александресску было реально проще, чем понять, о чем написано в инструкции к "установке буста под виндовс". Там кучка каких то ключиков. Надо сначала из исходников собрать сам инсталятор. Потом уже с его помщью ещё кучка ключиков... ой... И вот моя первая реакция: "а они что, они не могли сделать нормальный инсталятор под виндовс? Как у всех нормальныех тулзов, начиная от самой студии, и заканчивая всякими полезностями типа Черепашки?" Как будто б тебе не готовый набор инструментов предоставляют, а полуфабрикат на котором написано: "а приготовить его ты должен сам". Мне была нужна хэш-таблица. Оказалось, что быстрее и проще загуглить отдельно взятый класс таблицы, чем мучится с установкой буста.
0
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|
16.11.2011, 08:31 | 46 |
Не могли.) Ведь на студии и виндоусе свет клином не сошёлся.
Дистрибутив буста < 20 мегабайт. Собранная библиотека десяток гигабайт. Можешь себе представить, сколько будут занимать версии для различных версий компиляторов... А так ты получаешь библиотеку оптимизированную именно под твой компилятор. Да и собирать буст вовсе не обязательно. Многие библиотеки это просто шаблонные классы. В их числе и интеллектуальные указатели. Например QT тоже самому собирать надо и это займёт в несколько раз больше времени, чем сборка буста.
0
|
|
16.11.2011, 08:44
[ТС]
#47
|
Не по теме: Ну вот заходишь на сайт черепашки, там сразу на выбор: Под линукс, под виндовс, под ещё что нибудь. Тыкаешь - дальше все происходит автоматически. Почему того же самого не сделали для буста? Сделать несколько готовых дистрибутивов запиленных под конкретные ОС (или даже конкретные компиляторы) - это не что-то такое заоблачное. 20 мегабайт в наши дни не такая уж критичная цифра. Пускай этот дистрибутив будит два часа шуршать и разворачивать все 10 гигабайт. Но при этом все что нужно будит сделать пользователю, это нажать на кнопочку "install" А не прыгать рядом с полуфабрикатом с бубнами. Никто не позаботился о том, как пользователи будут разворачивать буст на своих рабочих лошадках. Видимо решили - умные ребята, как нибудь разберутся.
0
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|
16.11.2011, 08:53 | 48 |
20 мегабайт это исходники. Архив бинарников весит несколько гигабайт. Одни только либы статической компоновки для сериализации весят 500 мегабайт.
Именно так и решили.) Документацию никто-же не отменял.) Программист ты или где? .))) Кстати, loki тоже собирать нужно.
0
|
|
16.11.2011, 09:29
[ТС]
#49
|
Не по теме: Да ну это на самом деле не так уж важно. Пусть будит инсталятор, который сам соберёт дистрибутив, сам же его запустит, а дистрибутив уже сделает все остальное. Ну получится конвеер сборки длиньше, а время сборки дольше. Смысл в том, что сделать удобное средство сборки инструмента можно. Было бы желание. И этих средств можно было бы наделать и для студии, и для чего угодно. И по сути, получились бы аналоги тех же паков, как это сделано в корпорации зла. Как грит один мой знакомый: "тебе дай волю, ты б все программирование бы свел к нажатию одной кнопачки". А если серьёзно: Когда я иду в магазин покупать себе телевизор, то я хочу купить готовый телевизор. Который можно просто включить, и смотреть кино. Если вместо телевизора мне дают коробку всяких микросхем и жутко-замороченную инструкцию "как собрать телевизор", то такой "телевизор" я уже не покупаю. Я хочу пользоваться библиотекой, а не тратить своё время в мучительных попытках тупо просто её установить.
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
16.11.2011, 09:44 | 50 |
Bers, Буст слишком универсальна для простого инсталятора. Откуда знать какие либы тебе нужны? Вот собираешь когда, тогда и указываешь.
На правах рекламы : в дистрах Linux-а уже лежит пакет для буста. Правда там отстают на пару версий, но это не столь важно.
0
|
|
16.11.2011, 09:49
[ТС]
#51
|
0
|
silent_1991
|
||||||
16.11.2011, 10:00
#52
|
||||||
0
|
Deviaphan
|
16.11.2011, 10:46
#53
|
Не по теме: Это не оффтоп, а логическое развитие вопроса ТС.
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
16.11.2011, 10:53 | 55 |
Bers, Потому что это не нужно. Ошибка в проектировании - это про обнуление входящего указателя.
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
16.11.2011, 10:57 | 57 |
Bers, Уже объяснялось в теме.
0
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|
16.11.2011, 11:06 | 58 |
И про создание класса интеллектуального указателя при уже существующий отлаженных и надёжных. Велосипед, использующийся годами множеством людей надёжнее, чем новая не обкатанная модель.
0
|
Заблокирован
|
|
16.11.2011, 11:08 [ТС] | 59 |
Если человек скормил указатель смарту, все - смарт владец указателя. что значит "а потом захотел так". А зачем потом хотеть так, если уже отдал владение объектом? Я вот этого не понимаю. В идеале, вообще было бы здорова, если после того, как обычный указатель был скормлен смарту, любая попытка продолжать юзать обычный указатель немедленно вызывала бы крэш с поясняющей табличкой "Угроза! Подозрение на программную ошибку в вызывающем коде" Добавлено через 1 минуту Буст идёт лесом.
0
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|
16.11.2011, 11:23 | 60 |
Опять же уже упоминали, что можно продолжать использовать исходный указатель, вместо вызова smart::get(). При этом получаешь строгую гарантию, что при выходе из области видимости объект будет разрушен. Конечно, для этого лучше подходит scope_ptr, а не shared, но суть та же.
Хорошо, забудем про буст. В упомянутой тобой библиотеке loki (которую ты прям понял), тоже есть класс очень гибких интеллектуальных указателей. Причём с памятью они могут работать даже эффективнее, чем бустовские, благодаря SmallObjectAllocator. Добавлено через 1 минуту Более того, используя метод get, ты фактически лишаешься владения объектом, не лишаясь его. Ведь для полученного из Get указателя, ничто не мешает вызвать delete (ничто, кроме здравого смысла).
0
|
16.11.2011, 11:23 | |
16.11.2011, 11:23 | |
Помогаю со студенческими работами здесь
60
Не знаю как реализовать Не знаю как реализовать Возможность доработки ERP системы без соответствующих знаний Canvas - не знаю как реализовать Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |