Ычан: [d | b / bro / hr / l / m / mu / o / s / tran / tu / tv / vg / x | a / aa / c / fi / jp / rm / tan / to / vn]
[Назад] [Вся нить] [Первые 100 сообщений] [Последние 50 сообщений]
Ответ в нить [Первые 100 сообщений]
Имя
Animapcha image [@] [?]
Тема   ( ответ в 17934)
Сообщение flower
Файл 
Пароль  (для удаления файлов и сообщений)
Параметры   
  • Прежде чем постить, ознакомьтесь с правилами.
  • Поддерживаются файлы типов 7Z, BZ, BZ2, GIF, GZ, JPG, MO, MP3, MP4, OGG, PDF, PNG, PSD, RAR, SVG, SWF, TXT, WEBM, WEBP, XCF, ZIP размером до 5120 кБ.
  • Ныне 3657 unique user posts. Посмотреть каталог
  • Предельное количество бампов нити: 500
cpp_furudo_erika.png - (754.49KB, 800×800)
17934
No. 17934  
Учим C++ за 21 день всем чиочаном.
Можно показывать крутой или страшный код, просить помочь с лабами и контрольными, помогать другим, а главное - много кодить.

Пополняемый список полезностей тут: https://docs.google.com/document/d/1rPPbiViiLSR2PlPnQWpZyk9Sz6-J7ucyM7HR6wvsYKk/edit?usp=sharing
No. 8273  
Cpp1.gif - (2.35KB, 491×314)
8273
Привет, ты ведь знаешь много компиляторов c++?
Я хочу наконец-то слезть со своего c++ Builder 6 и перейти на что-нибудь современное. Работаю я с OpenGL-графикой и обработкой огромных массивов данных, а требования у меня примерно такие:
Венда, да. Кроссплатформенность приветствуется, но не обязательна.
Бесплатное и свободное ПО. Продавать программу не собираюсь, но всё равно не хочется когда-нибудь начать париться с лицензиями.
Поддержка 64-бит (хочется спокойно загружать в программу файлы без ограничения на размер).
Желательно наличие конструктора форм. Хотя в крайнем случае те же кнопочки и бегунки проще будет написать на чистом OpenGL'е.

Немного ознакомлен с MS Visual C++ и Qt, но переходить не спешу. Студия пугает привязкой к .net и несвободной лицензией, по поводу Qt не знаю, подходит ли он.
В общем, очень прошу, подскажите мне что-нибудь подходящее, или убедите сделать выбор в пользу Visual Studio или Qt.
Заранее спасибо.

Первый раз в dev, местных традиций не знаю. Если задел чьи-то чувства — прошу прощения.
No. 8274  
5ce854d98562f99ef5d6a18bac4a165d.jpg - (355.39KB, 1260×1400)
8274
Если хочешь рисовать формочки для C++, думаю нужно выбрать Qt. У microsoft, afaik, сейчас все gui тулкиты на .NET, а managed c++ - это недоразумение.
Из свободных компиляторов, собирающих Qt, есть g++ и clang. Насколько хорош clang, я не знаю, icc хватает.
No. 8276  
>>8274
Автобусну рыжую мадоку.
QT Builder, наверное, будет идеальным вариантом. Только, то, что ты называешь "компилятор" на самом деле называется Integrated Development Environment.
No. 8277  
>>8276
QT Creator.
http://qt.digia.com/Product/Developer-Tools/
No. 8280  
>>8274
>>8276
>>8277
Спасибо. Значит, всё-таки qt. Попробуем-с.
No. 8282  
А я плюсану Visual Studio. И Visual Assist к ней. Все-таки стандарт разработки под венду, от ее же производителя. Хотя WinForms и привязан к .NETу и managed коду, практика показала, что довольно легко сделать гуй в управляемом классе, а всю логику вынести в набор неуправляемых, написанных уже классическим способом классов - это еще и приучает использовать шаблон MVC:3

Раз уж речь зашла про OpenGL, то можно вместо системного гуя использовать glfw + CEGui, например, чтобы формочки были красивыми и быстрыми(и кроссплатформенными, кстати).

Стивы, а поясните по QT: там используется свой компилятор, gcc, или микрософтовский? (при разработке под венду, естейственно)

И еще, воспользовавшись тредом, задам вопрос ОПа, только для линукса, так как мало с ним опыта имел - какую IDE посоветуете и почему?
No. 8283  
>>8282
> А я плюсану Visual Studio.
Там уже появилась система сборки?

>там используется свой компилятор, gcc, или микрософтовский?
Можно использовать и mingw и msvc. В обоих случаях в процесс сборки включается некий дополнительный этап кодогенерации.

> какую IDE посоветуете и почему
Из юзабельных есть eclipse и QtCreator. Мне достаточно vim и cmake.
No. 8284  
>>8282
> практика показала, что довольно легко сделать гуй в управляемом классе
Ох уж эти практики. C++ и так один из самых уродских языков, а managed - это вообще выкидыш-мутант. И находятся люди, которые на этом пишут и просят ещё.
No. 8285  
Голосую за Qt.
Qt-няша
No. 8287  
shot0260.png - (698.25KB, 1280×720)
8287
> Работаю я с OpenGL-графикой и обработкой огромных массивов данных
> наличие конструктора форм
Выкинь из головы этот быдлопринцип привязывать главный алгоритм к гуям, сходи к венеролгу и прям так и скажи, «<имярек> подцепил билдер, что делать?»
> кнопочки и бегунки проще будет написать на чистом OpenGL'е.
Так ты формочки лепишь или огромные массивы данных обрабатываешь, я не пойму?
> В общем, очень прошу, подскажите мне что-нибудь
1. Отдели в своём мозгу компилятор и библиотеки от IDE;
2. gcc @ icc — вот твой выбор (у тебя же не амд?);
3. Забей на поддержку 64 бит. Даже Firefox дропнул поддерживать x86_64 сборки для венды, потому что тот пиздец, что там творится, не поддаётся описанию. По хорошему, чтобы открывать файл, используется вызов к операционной системе, и все языковые fopen() и ей подобные — лишь обёртки над системными вызовами. Соот-но если ось и/или её ФС не поддерживает оперативку и/или файлы на диске объёмом 4 GiB, ты с этим ничего не поделаешь;
4. Qt — жирный неповоротливый фреймворк для рюшечек. Я понимаю, почему ты хочешь взять именно это (сам такой был лет пять-шесть назад), но за то, где ты собираешься его применять, надо бить по щщам.
5. Есть полно других IDE, фреймворков и просто библиотек, начни с малого, я бы советовал попробовать писать интерфейсы на gtk2, не для того, чтоб потом этим зарабатывать, хотя это возможно, а для того, чтобы понять, как оно должно выглядеть без мегабайтов ненужного. А ещё есть WxWidgets и Code::Blocks например;
6. Вообще, никакой IDE не нужно, есть емакс.

>>8283
> Из юзабельных есть eclipse и QtCreator
Ты ещё NetBeans приплети, который жрёт по 700 метров на крохотный проект, падает по два раза в сутки, и при этом не имеет функции автосохранения из коробки.
No. 8288  
>>8287
> Вообще, никакой IDE не нужно, есть емакс.
> емакс.

А туда уже добавили текстовый редактор?
No. 8289  
>>8288
No. 8290  
>>8287
>привязывать главный алгоритм к гуям
ОП похоже что-то визуализирует. Как ты собираешься отвязать алгоритм визуализации от гуёв?
> Qt — жирный неповоротливый фреймворк для рюшечек.
ОП собирается использовать OpenGL. Лучшей интеграции с OpenGL нет ни у одного другого тулкита, кроме каких-нибудь CEGUI/MyGUI. Почитай на досуге про QGL.
>есть емакс.
Этот раздутый комбайн в свою очередь не нужен, поскольку есть vim.
>Ты ещё NetBeans приплети
"Женский" аргумент. См. "Двенадцать приемов литературной полемики", пункт 7.
No. 8291  
ОП на связи.
Моя задача — обсчитывать и сравнивать огромные файлы, а также визуализировать результаты в реальном времени. Данные общим объёмом превышают 32-битное ограничение.
Есть решение хранить всё на диске, строить оптимизацию и держать в памяти только то, что нужно для непосредственной обработки, но это и реализовывать будет неудобно, и жёсткий диск захлёбывается. Скорее всего, в таком случае работа в реальном времени невозможна.
Гуи мне определённо нужно, даже если его придётся «рисовать» самому, в окне OpenGL. Не проще ли использовать готовое решение?
Протестировал 32-битный Qt. Выглядит красиво, изящно. Очень многого не знаю, куча времени уйдёт на переучивание (пришлось искать в мануалах даже такие элементарные вещи, как преобразование числа в строку и обратно).
Сделал простой тест — сколько памяти выделяет программа (на 32-битном Qt): результат не отличается от Builder'а. Протестировал и Visual C++ — там раза в 4 меньше и жуткие тормоза. Таким образом не вижу строгой необходимости пока уходить с Билдера, если не найду чего-то объективно лучшего: с лицензиями меня никто трогать не будет, программу я не продаю.
Также обнаружил, что готовой 64-битной Qt под Windows нет, но её можно (!) собрать самому:
http://habrahabr.ru/post/79233/
Повторюсь, что местных традиций не знаю. Если здесь ненавидят этот сайт — прошу не бить.
Это вообще реально? Игра стоит свеч? Или кто-нибудь может предложить мне свежую идею?

Заранее спасибо.
No. 8292  
ОП тролль. Зачем тебе какой-то там гуи тулкит если твоя задача - именно визуализация. Будь мужиком - используй голый openGL и не выпендривайся.
No. 8293  
shot0086.png - (763.55KB, 1280×720)
8293
>>8290
> ОП похоже что-то визуализирует.
Неочевидно.
> ОП собирается использовать OpenGL.
Если ты вдруг соберёшься прыгать в окно, это ничего не скажет о рациональности твоего поступка.
> поскольку есть vim.
Если на то пошло, ненастраиваемое бибикающее бинарное и ненужно.
> "Женский" аргумент. См. "Двенадцать приемов литературной полемики", пункт 7.
Иначе говоря, защитить Eclipse, Qt Creator и NetBeans ты не можешь. Ок.

>>8291
> а также визуализировать результаты в реальном времени
Ты там трёхмерную карту звёздного неба проецируешь или цифорки в огромном списке гоняешь?
> но это и реализовывать будет неудобно, и жёсткий диск захлёбывается.
Естессно захлёбывается, если ты пытаешься моментально прогнать через него пару гигабайт. Померяй ему среднюю пропускную способность каким-нибудь hdparm и поймёшь сколько реально он может считать в секунду. После подгрузки основного можно догрузить про запас ещё плюс-минус сколько-то для плавности. Хотя если заказчик хочет штоббыстромнетут, требуй от них систему, на которой можно было бы при запуске заталкивать весь каталог в оперативку и в ней уже гонять. Хотя я сомневаюсь, что Оп так сделает.
> Таким образом не вижу строгой необходимости пока уходить с Билдера, если не найду чего-то объективно лучшего
Как пить дать тормоза билдера и культей упираются в I/O, но культи, если они с gcc, можно было хотя бы подточить под машинку-то если это не 486.
No. 8296  
Не могу понять, о чем вы тут трындите, наркоманы. Со старого сибилдера нужно переходить на новый. Собственно, всё.
No. 8298  
motivationalnecromancy.jpg - (59.70KB, 600×750)
8298
>>8296
>Со старого сибилдера нужно переходить на новый.

Датс мах бой! Как говорится, похрен, что девушка не дышит, если она хорошо выглядит - можно трахать.
Борланд уже давно помер, и ембаркадера скорее всего последует его примеру.
No. 8299  
>>8298
> DOS давно помер, и Windows 7 скорее всего последует его примеру. Пишите под линупс.
Логика настоящего программиста.
No. 8300  
Под винду есть несколько С++ компиляторов:
Из часто используемых - MSVC, icc, MinGW
clang под винду пока что не очень жизнеспособен, даже транк.

По поводу 64 бит: У меня не было проблем с MSVC вообще, интел тоже работает, но с ним нужно быть аккуратнее: можно попасться на алиасинг и странные баги с -O2, если ОП знает что это такое. Правда это будет что с 32 битами, что с 64. Про мингв и 64 бита я ничего не знаю.
По поводу привязки студии к .нету - это ложь и провокации. Если тебе дотнет не нужен, то ты его просто не используешь. Если нужен, то используешь.
По поводу системы сборки у мсвц - вообще-то их есть аж 2,5 штуки, если ты не знал.
По Qt - своего компилятора там нет - там есть свой препроцессор.
No. 8301  
1477892-lady_death.jpg - (417.64KB, 1111×864)
8301
>>8299
>DOS давно помер, и Windows 7 скорее всего последует его примеру

Я даже не буду врать, что мне неприятно тебя расстраивать. Вот, посмотри на картинку с тетенькой раздетой.
( последняя версия винды уже 8, а она "немножко" отличается от привычных окошек )
No. 8302  
>>8300
Не ложь и не провокации. Будешь писать на винапи - полысеешь и ослепнешь.
M$ вроде бы довольно давно намикает, где он видал тех, кто не пишет под .NET.
No. 8308  
>>8302
А кто заставляет писать тебя на винапи?
Есть куча мультиплатформенных фрейморков, MFC тот же. Просто не обязательно лезть в дотнет. А если даже и лезть, то интерфейс куда проще и удобнее писать на C#, благо из дотнета дллки вызываются очень просто и безболезненно.
No. 8309  
>>8300
> вообще-то их есть аж 2,5 штуки, если ты не знал.
С этого места подробнее. Я слышал про аналог make и видел эту xml-ную непереносимую гадость, адаптированную для мышководства. Аналог CMAKE/SCONS, который бы сам находил пути к библиотекам и инструментам и которым можно было бы управлять скриптами там есть?
No. 8310  
>>8309
> аналог make
> xml-ную непереносимую гадость
ну и ещё одна версия оной

вот и 2.5 штуки, ты ж сам их знаешь.
Алсо, первая штука тоже непереносима же.
С библиотеками и прочим в любом случае под виндой придётся страдать, тут делать нечего, увы.
No. 8311  
>>8310
Среди тех жопных затычек, что я перечислил, нет ни одной системы сборки. Значит в студия так и не обзавелась этим необходимым инструментом. Окошки-то хоть красивее стали? И да, что там с c++11?
No. 8319  
>>8311
По поводу автоматического поиска библиотек под виндой - а искать-то их негде. В винде нет /usr/, /usr/local/ и прочего ведь. Как ты в таком хламе будешь искать библиотеки? Для того же cmake эти пути придётся прописывать руками.
Алсо, пара библиотек под виндой собираются мсовской nmake, я сам собирад.

По поводу С++11 - похуже, чем у clang и gcc, но они движутся вперёд. В последнем CTP появились variadic templates. Вообще, по С++11 статусу есть чудная табличка http://wiki.apache.org/stdcxx/C%2B%2B0xCompilerSupport
No. 8321  
>>8319
> По поводу автоматического поиска библиотек под виндой - а искать-то их негде.

Я пользовался такой маргинальщиной как waf, так тот умел находить библиотеки CUDA и Qt, узнавая полный путь к nvcc и moc (при условии, что те прописаны в PATH). Boost, конечно, приходилось руками подключать.
No. 8322  
>>8321
P.S. Ещё он умеет хитрым образом встраивать себя в студию, заменяя тамошнюю систему сборки.
No. 8324  
>>8321
CUDA при установке прописывает себя в системные переменные окружения. Qt по-моему тоже. Так что это всё не считается.

>>8322
А в студии система сборки по-моему вполне выполняет свои цели, если не нужно кросплатформенность. А если нужно, то cmake умеет генерить студийные проекты. Правда я для этого им ни разу не пользовался.
No. 8325  
>>8324
> Так что это всё не считается.
Так система сборки vs и переменные окружения-то не читает, по крайней мере по умолчанию.
No. 8334  
>>8325

Ну так это и вызвано тем, что не предусматривает система стандартных путей для библиотек и стандартных названий переменных окружения. Что, в общем то, не удивительно для системы, в которой изначальный способ распространения программ - бинарники, а не сорцы.

С другой стороны, я подозреваю, что и в nix системах придется точно так же страдать, если понадобится установить несколько разных версий библиотеки и использовать разные версии в разных проектах. Точно так же придется положить собранные версии где-нибудь в home и руками тыкать билд-систему туда. Я не специалист по cmake, но беглая поиск не показывает, что в find_package можно указать версию - следовательно, надо указывать путь поиска к установленной библиотеке.
Возможно, вышеназванный пример не часто встречается в мелких проектах. Зато в так называемом "энетерпрайз" версии библиотек фиксируются и все пишется и тестируется относительно строго заданного списка. И я всеми руками за то, чтобы прямо указать нужную версию из нужной папки, вместо того, чтобы полагаться на какую-то версию, установленную в системе, которая завтра может обновиться вместе с пачкой всего остального софта в системе.

В своей практике использования visual studio, чтобы не повторять у себя на машине этот процесс настройки местоположения зависимостей много раз, я делал один раз property page с путями к библиотеками, сохранял в отдельный файл foo.props и затем подключал его ко всем необходимым конфигурациям всех нуждающихся проектов. Или даже по файлу на каждую отдельльную библиотеку и ее конфигурацию. Возможно, есть более удобный способ. Мне хватало этого.
Сборка из консоли/скриптов также возможна. devenv /build выручит отца русской демократии. Сам не использовал, но судя по логам студия вызывает то же самое.

Билд-система - штука важная в ide, конечно. Но не самая. Настройка билда пишется один раз. Потом по мере необходимости правится. В больших проектах этим, в идеале, занимается отдельный человек.
И если на настройку билда уходит время, сопостовимое на написание самого проекта - проблема не в ide. Просто выбранный инструмент используется не по назначению. И это не проблема молотка, что им очень сложно пилить.

Я же нахожу более важным в ide удобство работы с кодом, удобство отладки. И я пока что не видел ничего удобнее связки visual studio/visual assist. Более-менее интеллектуальные дополнения, быстрые преходы и поиск использования очень помогают. И, также, я не видел ничего удобнее для визуальной отладки. В студии легко настроить отображение именно того, что нужно и показывать все это вместе.
No. 8343  
>>8325
Я для своего проекта, который зависит от BOOST, MPI и ещё некоторого количества всякой математической фигни делаю зависимости в студии (2010, 2012) через переменные окружения. В смысле, укажите пжалст пути, куда вы поставили MPI, куда для бууста сделали b2 install, ну итд.
Линукс-билд собирается cmake.

> И, также, я не видел ничего удобнее для визуальной отладки. В студии легко настроить отображение именно того, что нужно и показывать все это вместе.
*this
Особенно для С++ отладка в студии лучшая. Для С тоже. Правда надо уметь этой студией пользоваться, большинство фишек отладчика на поверхности не лежат. Настройка визуализации в студии конечно менее гибкая, чем питон в gcc, но ей довольно легко пользоваться. А в 2012 эту штуку даже задокументировали и сделали xml-based конфигурацию.
No. 8344  
>>8334
>Что, в общем то, не удивительно для системы, в которой изначальный способ распространения программ - бинарники

Бинарных дистрибутивов линукса полно. Source-based - меньшинство.

>С другой стороны, я подозреваю, что и в nix системах придется точно так же страдать, если понадобится установить несколько разных версий библиотеки и использовать разные версии в разных проектах.

В gentoo с этим проблем вообще нет благодаря системе слотов. В других дистрибутивах несовместимые версии библиотек тоже можно использовать, но более костыльно.

> Настройка билда пишется один раз.
Переношу я свой проект на новый компьютер или распространяю по сети...

> Я же нахожу более важным в ide удобство работы с кодом, удобство отладки. И я пока что не видел ничего удобнее связки visual studio/visual assist. Более-менее интеллектуальные дополнения, быстрые преходы и поиск использования очень помогают. И, также, я не видел ничего удобнее для визуальной отладки. В студии легко настроить отображение именно того, что нужно и показывать все это вместе.

Правильно настроенный и обмазанный плагинами vim не менее удобен (дополнение делается clang'ом, получается не хуже VAX). Отладчиком я почти не пользуюсь (тем более для CUDA он работает через раз). В целом, переход на linux был самым счастливым моментом в моей программистской жизни.
No. 8348  
>>8343
>Особенно для С++ отладка в студии лучшая. Для С тоже
Не соглашусь. В эклипсе к gdb довольно приятная морда, студя после нее кажется жутко неудобной и перегруженной.
No. 8360  
>>8301
Я ЖУТКО извиняюсь, но когда успела выйти Винда версии 8? Последний раз когда я проверял, выходила только какая-то NT 6.2

_быдлокожу в мсвц, рекомендовать ничего не буду_
No. 8361  
>>8360
October 26, 2012 согласно крези-лесбо-ресурсу под названием википедия.
No. 8362  
>>8361
Но это же и есть NT 6.2? При чем тут восьмая версия? Если считать все дробные версии, то их больше восьми наберется, а маркетинговое название... Ну это название, не больше того.
No. 8364  
>>8362
Извини, я сразу не понял, что тебя интересует не "windows 8", а восьмой по счету релиз. Крези-лесбо-непонимание~

Быть может тебе нужна nt 3.51? Она вышла в крези-лесбо-1995-м году
No. 8395  
>>8364
Меня интересует виндовс восьмой версии, упомянутый в посте, на который я сослался, когда спрашивал. Не более того.
No. 8396  
>>8395
>Меня интересует виндовс восьмой версии
Но ты же сам сказал, что это nt6.2 и что она тебя как раз не интересует. Я запутался.
No. 8397  
>>8396
Но там не про нт6.2, там про мифическую восьмую версию. И её малые отличия от предыдущих.
No. 8398  
>>8397
Нет, в википедии как раз про nt6.2 (ее кстати еще называют windows 8). Так что ничего мифического в ней нет, ты что-то путаешь.
No. 8399  
Морда сдулась. Я надеялся тебя на больше хватит
No. 8400  
>>8398
Для слепых - цитирую. Для тупых - обесняю.

>последняя версия винды уже 8, а она "немножко" отличается от привычных окошек
Явная импликация того что версия-то уже ОГОГО, а всё ничего не меняется. Хотя по факту между всеми мажорными версиями было достаточно много отличий, а последняя мажорная версия - 6.

Ня.
No. 8401  
>>8400
Да знаю я. Я с тобой заигрывал, а ты взъелся. Фу.
>Ня.
A в итоге-то не ня
No. 8402  
>>8400

Слушай, я дам тебе совет. Если ты не знаешь отличий версии "ядра" от версии "дистрибутива" то не пытайся умничать. Или у тебя дистрибутивы линукса все сплошняком версии 2.x или 3.х? Или может быть весь функционал какой ты используешь тебе дает исключительно "йадро"?

> а всё ничего не меняется

Меняется, только не там где нужно. Как пример: восьмерка дропнула поддержку некоторых d-linkовских железяк, а поддержка сети в ней лучше не стала. "штатными" средствами раздать через нее интернет в домашней локалке до сих пор подвиг.
Виндобыдло такое виндобыдло вобщем.
No. 8415  
>>8402
Если тебе это важно, то скажу, что твой пост я прочитал.
No. 8416  
>>8415
слив защитан
No. 8417  
>>8402
> "штатными" средствами раздать через нее интернет
Ну и кто тут быдло. Может еще про недостатки блокнота с паинтом покукарекаешь?
No. 8418  
Popcorn_02_Stephen_Colbert.gif - (1.12MB, 330×248)
8418
No. 8422  
>>8417
Блокнот вообще-то самая пиздатая программа в поставке (вероятно ее сам бил гейтс писал кровью христианских младенцев-девственниц). А вот паинт действительно говно. Там интерфейс не как в фотошопе и слоев нет.
No. 8423  
>>8422
Пайнт в виндовс 7 стал ня и каваии. В нем появилась возможность обрезать по выделению!
No. 8431  
>>8422
> Блокнот вообще-то самая пиздатая программа в поставке (вероятно ее сам бил гейтс писал кровью христианских младенцев-девственниц).
Ты им хоть пользовался? Он же тупо половину файлов не может нормально открыть. То не распознает переводы строк и весь текст в кашу, то не распознает юникод и каждая буква через пробел. Не может в кодировки, в результате любуешься мусором вместо текста. Паинт по сравнению с таким хламом - слепящее совершенство.
No. 8433  
1311747338112.jpg - (407.83KB, 1920×1200)
8433
No. 12637  
Нагуглить не смог.

Можно ли сделать friend function, но friend не по отношению к классу, а к другой функции?

пощу баян
No. 12639  
>>12637

С++ этого напрямую сделать не позволяет, но возможны различные workaround'ы.

Например, можно объявить в классе метод как protected, унаследовать от этого класса другой и объявить нужную функцию дружественной уже к унаследованному классу.

Кроме того есть интересный passkey-паттерн:
http://stackoverflow.com/questions/3220009/is-this-key-oriented-access-protection-pattern-a-known-idiom
No. 12640  
friend предоставляет функциям доступ к private и protected членам класса. Для использования не рекомендуется.
Теперь объясни чего ты хочешь получить в одной функции от другой (коме как вызвать).
No. 12642  
>>12640

Видимо он хочет доступа ко внутренним переменным. И да, это естественно глупость а ОП бака
No. 12644  
Ох уж эти иксперты-кукаретики.
Простейший пример: операторы сериализации. Скажем, надо сериализовать объект в массив char или что-то подобное. Тут то нам и пригодится доступ из оператора к private-членам сериализуемого класса, т.к. состояние объекта не обязательно полностью доступно извне. (Хинт: оператор - та же функция.)
А в крестах это делается элементарно. В Qt это выглядит как-то так:
friend QDataStream &operator<< (QDataStream &s, const YourClass &yourObject);
No. 12645  
>>12644
В этом случае я обычно делаю public метод
QDataStream& YourClass::saveToStream(QDataStream &stream) const;
и оператор сериализации
inline QDataStream& operator<<(QDataStream& stream, const YourClass& obj) {return obj.saveToStream(stream);}
В самом операторе постоянно разыменовывать объект для доступа к членам муторно и не правильно.
No. 12647  
>>12645
Скажи это авторам Qt.
Не могу сказать, что совсем с тобой не согласен, но, на мой взгляд, в том, чтобы плодить лишние методы, тоже есть свои минусы. Разыменование же вообще не проблема, не обязательно имя параметра делать многобуквенным, обозначил как const YourClass &o и все.
No. 12648  
1417446186273.png - (121.18KB, 283×269)
12648
>Можно ли сделать friend function, но friend не по отношению к классу, а к другой функции?

Пожалуй сохраню это в свою коллекцию идиотизмов. Нет, ну правда, о чем думал оп когда создавал нить? Подумал ли он о том что хочет получить доступ к тому, чего либо еще нет (фунция не вызвана), либо уже нет (функция отработала и удалила свой стекфрэйм вместе со всеми локальными переменными)?
No. 12649  
>>12648
Нет, это твой пост надо сохранить.
No. 12650  
>>12649

Это почему? Или ты из тех кто мелет языком, не отвечая за сказанное?
No. 12652  
>>12650
Потому что хуйню ты полную спизданул. Объявление класса/функции как дружественного означает, что этот класс/функция получают доступ к protected/private членам класса, по отношению к которому они были объявлены дружественными. При чем тут вообще стек, существование чего-то или не-существование? Не к экземпляру класса же идет привязка, а к самому классу. Где у тебя тут несуществующее и удаленное из стека? http://ideone.com/3tBZvo Хоть бы разобрались сначала, прежде чем кукарекать.
No. 12655  
Как я вспонмил теперь, у GCC в режиме C есть nested functions.

Я только что понял, что я решеине узнал ещё вчера - function object. Класс, у которого есть оператор (). Все переменные определяю в нём, и френдом делаю класс, а не функцию.


>>12640
>Теперь объясни чего ты хочешь получить в одной функции от другой (коме как вызвать).

Только этого и хочу. Я хочу вынести куски кода в функцию для улучшения организации, но не хочу передавать туда кучу параметров.


>>12645
>В самом операторе постоянно разыменовывать объект для доступа к членам муторно и не правильно.

О, кстати, а результаты выполнения каких операторов кэшируются? Разыменование кэшируется?


>>12650

1) Потому что статиков нафигачу и всё у меня будет.
2) Потому что мфв из анимы.

>>12652
>При чем тут вообще стек, существование чего-то или не-существование?
>>Можно ли сделать friend function, но friend не по отношению к классу, а к другой функции?

А вот при том.
No. 12656  
>>12655
>Я хочу вынести куски кода в функцию для улучшения организации

Для улучшения читаемости, то есть.
No. 12657  
>>12655
>А вот при том.
Прости, я жопой читал. Мои извинения.
No. 12660  
>>12652

Хотел было в эпитетах написать насколько ты долбишься в глаза, но >>12655-кун ткнул в нужное первым. Да и вообще, высмеивать убогих - зло.
No. 12661  
>>12660
А выебываться, когда уже извинились, и того хуже.
No. 12662  
>>12655

>1) Потому что статиков нафигачу и всё у меня будет.

Так нафигач их вне функции, будь как все начинающие. Ты конечно прав с этим. Но, как по мне, статики в функции являются исключением нежели правилом. А значит их наличие должно обговариваться отдельно

>2) Потому что мфв из анимы.

Кто? Откуда?
No. 12664  
>>12661

>выебываться

Этим тут занимался только ты.
No. 12670  
>>12662
>Ты конечно прав с этим. Но, как по мне, статики в функции являются исключением нежели правилом.

Всё лучше, чем ты думаешь - я объявлю все переменные в function object, которому я делаю друзей. И никаких статиков не будет, это я пошутил так.


>>12664
>Этим тут занимался только ты.

Голос из-за соседнего столика: "Нет. >>12660 этим тоже занимался, да и >>12648 тоже."
No. 12671  
NO_U.jpg - (39.47KB, 521×332)
12671
>>12664
No. 12673  
>>12670

А не путаешь ли ты провокационную манеру донесения знаний с выебонами? И почему интересно я не должен был называть убогого агрессивного невежду убогим?
No. 12674  
Девочки, не ссорьтесь.
No. 12675  
>>12673
>И почему интересно я не должен был называть убогого агрессивного невежду убогим?

Потому что ты никому ничего не должен, например.

Давай, я лучше поверну вопрос другой стороной: твой пост хоть какую-нибудь ценность имеет? Он хотя бы крупинку юмора содержит?

>провокационную манеру донесения знаний

Кривое формулирование своих мыслей, не преследующее никакую цель, кроме соответствия негласным стандартам вербальной борьбы "кто из нас лох", сегодня именно так назвается? Я запишу.

Конкретно мне такое самовыражение претит.
No. 12676  
1367769827631.gif - (153.68KB, 247×318)
12676
>>12675

>твой пост хоть какую-нибудь ценность имеет?

Давай перечитаем часть моего первого пост вместе. Если хочешь, можно даже по слогам.

> Подумал ли он о том что хочет получить доступ к тому, чего либо еще нет (фунция не вызвана), либо уже нет (функция отработала и удалила свой стекфрэйм вместе со всеми локальными переменными)?

В этом месте я ссылаюсь на явно неправильную постановку вопроса в ОП-посте( friend-овость не к классу, к функции) и уточняю почему именно: данные, которые можно получить "по дружбе" из функции, по факту с большой вероятностью банально не определены.

Нет, есть конечно вариант что где-то выше по стеку вызовов уже начала работать(и соответственно еще не завершилась) нужная нам функция... но надежда на такого рода совпадения является маргинальщиной порядками большей нежели использование в функции кучи статиков.

Также есть отсылка на конкретный термин - stackframe - зацепившись за который можно найти нужную информацию о процессе вызова функций. В частности о том, где и как обычно размещаются переменные, определенные в функции.

Каюсь: мне почему-то показалось что недвусмысленного намека с отсылкой в нужном направлении хватит. В крайнем случае я был готов ответить на возникшие вопросы и уточнить неправильно понятое. Но откровенное хамство, добротно перемешанное с нежеланием нормально прочитать написанное, была для меня неожиданностью я почему-то был лучшего мнения о здешних обитателях. Но видимо они появляются тут намного реже случайных посетителей учебных заведений
No. 12677  
>>12676
>Но откровенное хамство, добротно перемешанное с нежеланием нормально прочитать написанное, была для меня неожиданностью я почему-то был лучшего мнения о здешних обитателях. Но видимо они появляются тут намного реже случайных посетителей учебных заведений
http://www.youtube.com/watch?v=lkvDPXULSy0
No. 12678  
>>12677

Вот не зря я на провокацию пошел. Не зря! Всего лишь, казалось бы, назвал сказанное человеком идиотизмом. Сказанное, не самого человека. И тут такое понеслось.

Мне в связи с этим просто до жути интересно: а какого это самоассоциировать себя с любой когда либо сказанной тобой фразой даже на анонимной борде? Может у тебя какие комплексы? Ты не скрывай - мы поможем.
No. 12679  
>>12678
Кончай бомбить уже.
No. 12680  
>>12679

Бомбишь тут только ты. но ведь все равно же будешь тужиться, доказывая что нет
No. 12681  
А могли бы код писать.
No. 12682  
>>12680
На мое слово десять твоих. Делай выводы.
No. 12683  
Заканчивайте.
No. 12685  
ОП здесь. Даже отвечать не хочу на всё это. Два тупака сошлись, хотят доказать друг другу, что один тупее, а в итоге - доказали, что тупые оба.

Пока вы вакуум перемещали, я додумался до ещё более простого - сделать класс, в нём определить все переменные, и вызывать метод класса, а дальше методы одного класса могут вызывать друг друга и ничего не передавать друг другу и использовать одни переменные.

>>12676
>В этом месте я ссылаюсь на явно неправильную постановку вопроса в ОП-посте( friend-овость не к классу, к функции) и уточняю почему именно: данные, которые можно получить "по дружбе" из функции, по факту с большой вероятностью банально не определены.

Мне глубоко фиолетово, что будет, если поделить на ноль сделать френд для функции с нестатическими переменными. Мне нужно дать одно окружение двум функциям.
No. 12695  
>>12685

>ОП здесь.

А ты никуда и не уходил. Завязывай сайемперсунить чтоли. ну не верю я в то что у такого олуха есть почитатели/воздыхатели, способные вот так вот впрячься за какую-то ничего не значащую для других фигню
No. 12699  
>>12695
>ну не верю я в то что у такого олуха есть почитатели/воздыхатели, способные вот так вот впрячься за какую-то ничего не значащую для других фигню

Я считаю, что я достаточно прямо выразил свою точку зрения. Сошлись два идиота, один из которых прочитал ОП-пост лучше.

Ты не веришь в то, что того, кто обзывается, тоже могут обозвать?

Мои посты:>>12637>>12655>>12656>>12670>>12675>>12685>>12699
No. 12700  
>>12699

Я не верю в то что кто-то взялся отстаивать позицию, которая имеет значение только для выразившего ее.
No. 12702  
>>12700

Ссыку на отстаивание мной чье-то позиции в студию. Что-то я не помню такого.

Если ты не заметил, >>12673 отвечает мне и ему отвечаю тоже я.
No. 12704  
>>12685

>Мне глубоко фиолетово, что будет, если поделить на ноль сделать френд для функции с нестатическими переменными.

какие все умные задним числом. Но спросил то ты именно об этом. А если бы подумал сразу - не спрашивал бы.

>Мне нужно дать одно окружение двум функциям.

Извини за мой французский, но если тебе изначально надо было именно это, то ты либо тролль, либо дурак.
No. 12707  
>>12704
>какие все умные задним числом. Но спросил то ты именно об этом. А если бы подумал сразу - не спрашивал бы.

Заднее число? Ну ты и лолка.

Давай по-другому. Представь себе, что я спросил не "как сделать френд для функции", а "как сделать френд для класса". И тут ты, такой, говоришь, что класс может быть ещё не создан или уже уничтожен. Вот это новость, прикинь, класс может быть ещё не создан! А уж если он уничтожен, то ваще пипец!


>Извини за мой французский, но если тебе изначально надо было именно это, то ты либо тролль, либо дурак.

Хоть горшком назови.
No. 12709  
>>12707

Ты правда дурак или прикидываешься?
Предположим я закрою глаза на то что friend'ить функцией класс - это впринципе единственная возможность что-то заfriend'ить. Вполне себе доходчиво описанная в книгах и статьях. Но

>класс не создан

Почему ты месишь в одну кучу экземпляр класса и сам класс?
No. 12710  
>>12709

Вот, смотри, ты начинаешь догонять до того, что реплика о ещё не созданных или уже истреблённых переменных была не совсем умной.
No. 12711  
>>12710

Умность - понятие субъективное. Я же говорил о конкретном факте. Если хочешь доказать мне ложность моего изначального утверждения про stackframe и существование переменных, размещаемых в нем - то вперед. До тех пор я буду называть кошку кошкой, а идиотизм - идиотизмом.

Пишу я на самом деле потому что мне интересно, насколько агрессивные и упорные нынче пошли невежды.
No. 12712  
>>12711

Есть какая-то причина для того, чотбы называть меня невеждой?

Или, если ты до сих пор галлюцинациями страдаешь, вот на это ответь:
>>Ссыку на отстаивание мной чье-то позиции в студию.

>До тех пор я буду называть кошку кошкой, а идиотизм - идиотизмом.

Чья-то (твоя? Не знаю) реплика о ещё не созданных или уже истреблённых переменных и есть идиотизм, давай с этого начнём. А если точнее - формализм в отношении чего-то не имеющего никакой формальности.

У GCC есть локальные функции - офигеть, как же быть, если переменные ещё не созданы, а локальная функция уже вызвана. А она, представь себе, не может быть вызвана, если не был вызван предок. Оказывается, никакой дилеммы нет?

Функция, представь себе, может выполняться не в одном потоке, то есть её окружений может быть несколько. Вот тебе и экземпляры.
No. 12716  
>>12712

>У GCC есть локальные функции

Это ты так nested functions обозвал? И тебя не смущает то что они видны исключительно внутри функции, в которой определены?
No. 12717  
>>12716

Мне большее и не нужно. Я же писал выше: хочу выделять куски алгоритма в блоки так, чтобы это было читаемо.

К примеру:

сесть_в_автобус()
{
подойти_к_двери();
запрыгнуть_на_ступеньку(); //инбифо низкопольные автобусы
оплатить_проезд();
}


И где-нибудь в конце функции сесть-в_автобус - все определения.

Вложенных функциям видны все переменные видные в вызываающем блоке, поэтому им ничего передавать не нужно.


Альтернатива - использовать goto и поддерживать правильные метки.
138 сообщений пропущено. Показаны 100 первых сообщений.
Удалить сообщение []
Пароль  
[Mod]