Взгляни! Взгляни, как красота чужда Рабам крестов, что слепо уповая, Стремятся байтоебствовать всегда:
Здесь жаждут скоростей, не признавая, Что кто-то может прочитать их код, И уступить удобству не желают.
О боги! Столь несчастен будет тот, Кто обречен тестировать ту массу, Что в ста коленах Бьерна проклянет.
А свыкнувшись, сам станет пидорасом.
TL;DR Читаешь https://goo.gl/kVaela , делаешь примеры и суешь в http://ideone.com , ошибки копипастишь в гугл, непонятное ищешь в предыдущих тредах, спрашиваешь в этом треде, если не нашел. Если тебя послали на хуй или не ответили, то ты спросил платину, читай предыдущие треды внимательнее. И прочитай FAQ, расположенный ниже, в нем много полезного.
Унаследованная памятка:
Вопросу по синтаксису идут на хуй. Лабы идут на хуй. "Как мне сделать Х на чистых крестах без библиотек" идут на хуй. Все идут на хуй. Хейтер сосет члены на пару со своей мамашей.
Q:Почему стоит использовать именно C++? A: Ни один язык не идеален, но по совокупности киллер-фич C++ оставляет все остальные языки позади. Вот основные три: + C++ действительно быстрый - по скорости они вместе с C с большим отрывом уделывают любой другой язык. Замедление относительно C находится в районе 0-20% а в ряде случаев C++ оказывается даже быстрее, причем проявляется только при использовании высокоуровневых конструкций (в крестах ты никогда не платишь за то, чего не используешь). + C++ один из наиболее выразительных и мощных языков, позволяющий использовать большинство существующих парадигм. Его философия построена на минимальном ограничении программиста в выборе методов и инструментов простреливания ноги решения задачи. + C++ по-настоящему популярен. На нем написаны десятки тысяч приложений и миллиарды строк кода, о нем написаны сотни книг, он до мельчайших подробностей документирован и стандартизован. Используя C++, ты никогда не останешься без работы или поддержки комьюнити.
Q:Но он же давно устарел! A: Современный C++ весьма далек от языка, которым он был в 1998 году. В настоящее время кресты живее всех живых, их развитие движется семимильными шагами, а новые стандарты принимаются каждые три года, сохраняя при этом полную обратную совместимость с предыдущими. К сожалению, из-за обилия некачественной литературы по крестам, в которой игнорируются новые средства языка, бытует мнение о его "несовременности".
Q:Сейчас все пишут на %languagename, а кресты сосут у него! A: Нужно понимать, что используемый язык должен соответствовать поставленной задаче. Никому не придет в голову писать на C++ скрипты или веб-фронтенд, но лишь немногие языки могут соперничать с ним по разнообразию решаемых задач.
Q:Окей, я решил вкатиться. Какие же книги мне читать? A: Специально для тебя аноны /pr собрали уникальную коллекцию отборной литературы по крестам. Только лучшие книги, последние издания, без хуев! Выбирай категорию и обмазывайся:
Для нюфань: Учебники для начинающих. Все примерно одинаковой годноты, читать имеет смысл только какой-нибудь один, который больше приглянется. Стэнли Липпман, Жози Лажойе и Барбара Му - Язык программирования C++ (2014) - https://goo.gl/kVaela Стивен Прата - Язык программирования C++ (2012) - https://goo.gl/z7kA8u Бьерн Страуструп - Программирование. Принципы и практика использования C++ (2011) - https://goo.gl/nAFUXa
Учимся не писать говнокод: Книги про основные подводные камни для тех, кто осилил предыдущий пункт. Следует пролистать все. Скотт Мейерс - Эффективное использование C++ (2005) - https://goo.gl/wsDXGz Скотт Мейерс - Наиболее эффективное использование C++ (1996) - https://goo.gl/tHa0tO Скотт Мейерс - Эффективный и современный C++ (2015) - https://goo.gl/Im8VYQ Скотт Мейерс - Эффективное использование STL (2002) - https://goo.gl/QtS8Dc Герб Саттер и Андрей Александреску - Стандарты программирования на языке C++ (2005) - https://goo.gl/Cpk4YR
Тонкости языка (для гурманов): Андрей Александреску - Современное проектирование на C++ (2002) - https://goo.gl/e1V5BC Герб Саттер - Решение сложных задач на C++ (2002) - https://goo.gl/iWaa6S Герб Саттер - Новые сложные задачи на C++ (2004) - https://goo.gl/4nn512
Также для легкого чтения подойдет книжка c историей создания C++: Бьерн Страуструп - Дизайн и эволюция C++ (1994) - https://goo.gl/FqbPwo
Отдельные аспекты: Читать по необходимости. Энтони Уильямс - Параллельное программирование на C++ в действии (2012) - https://goo.gl/qJfBkD Николаи Джоссатис - C++. Стандартная библиотека (2012) - https://goo.gl/PEyiMH Дэвид Абрахамс, Алексей Гуртовой - Шаблонное метапрограммирование на C++ (2009) - https://goo.gl/isSt7j Дэвид Вандевурд, Николаи Джоссатис - Шаблоны C++. Справочник разработчика (2003) - https://goo.gl/0M4NpG Роберт Седжвик - Фундаментальные алгоритмы на C++ (2001) - https://goo.gl/4jwxSl (части 1-4), https://goo.gl/yDuQgG (часть 5)
Q:Хуле тут так сложно? Я открыл учебник, там какой-то ад! A: Попробуй учебники, изданные после 2011 года. Фичи последних стандартов не только добавили выразительности, но и серьезно упростили жизнь разработчиков. Теперь программировать на C++ стало проще, чем когда-либо! Это не отменяет необходимости прочитать несколько серьезных книжек, чтобы написать на нем что-то годное. Тем не менее, да, C++ это по-настоящему сложный язык. Его никак не получится выучить за 21 день, ну вот совсем никак. Более того, крайне нежелательно пытаться изучить его первым, если ты раньше вообще не программировал. С большой вероятностью это приведет к разочарованию и потере времени. Гораздо лучше будет начать с другого языка и базовых вещей алгоритмы, архитектура пека, операционные системы, а уже потом вернуться к крестам.
Q:Ты охуел? В этих книгах по тысяче страниц! Хочу коротких статей. A: Вот тебе блоги, факи, референсы и всякое такое:
Q:Я готов начать погроммировать! Куда мне писать код? A: Под шиндошс удобно использовать IDE Microsoft™ Visual Studio®. Базовую версию (2015 Community) можно бесплатно скачать отсюда: https://goo.gl/qgAAc6 (русская версия) или https://goo.gl/WIPW9L (ангельская версия). Чтобы начать писать код, нужно запустить Visual Studio, кликнуть "Файл - Создать - Проект - Пустой проект", после создания кликнуть слева правой кнопкой мыши по пункту "Файлы исходного кода", выбрать "Добавить - Создать элемент - Файл C++". Свои хэллоуворлды писать в этот файл, в дальнейшем можно добавить другие файлы и хедеры. Чтобы скомпилировать и запустить проект, нужно нажать "Сборка - Собрать решение", а затем "Отладка - Запуск без отладки".
Под *nix, как правило, уже предустановлен компилятор gcc (если нет, используй sudo aptitude install gcc), так что достаточно сохранить хэллоуворлд, набранный в текстовом редакторе, и выполнить g++ helloworld.cpp и ./a.out. Но удобнее установить какую-нибудь IDE, например, весьма удобную CodeLite (sudo aptitude install codelite codelite-plugins), и работать в ней. Ее также можно использовать и в шиндошс, но тогда сперва придется установить MinGW (http://mingw.org).
Еще у нас есть IDE, призванная похоронить Visual Studio пока не особо получается. Она стоит денег, но можно украсть почти не протухшую версию на торрентах или получить бесплатную лицензию по скану студбилета, если ты студент. Удобные свистелки и перделки присутствуют. Тормоза и баги присутствуют. Кросплатформенность присутствует - https://www.jetbrains.com/clion
Можно также не устанавливать ничего, а запускать свои хэллоуворлды на http://ideone.com, выбрав в левом нижнем углу язык C++14.
Q:Не буду я все делать сам! Подавайте сюда софт, который все сделает за меня и подотрет мне жопу! A: Без проблем:
Q:Мне надоело писать велосипеды, какие у вас тут популярные либы? Q:Нужно зделать %монструозная_хуйня_нейм, но я обосрался от одной мысли о написании ее с нуля, что же делать? A: Гляди сюда:
boost
Бесспорно, это самый популярный набор C++-библиотек. Не будет лукавством сказать, что C++ во многом обязан популярностью именно ему. Воистину всеобъемлющий, boost способен удовлетворить твои самые скотские фантазии. В нем есть практически все - от математических функций до сетевых компонент, от инструментов тестирования до динамических типов. Функции для работы с твоей мамашей там тоже есть. Разумеется, все это швабодное и работает на любых платформах. И да, boost является своеобразным инкубатором хороших библиотек, поэтому наиболее удачные из них с большой вероятностью можно будет увидеть после принятия очередного стандарта уже как часть стандартной библиотеки.
Недостатком boost можно считать его размер - более 300 мегабайт. Большинство компонент boost не являются независимыми, и попытка использовать один единственный контейнер обернется фактическим подключением 2/3 всего присутствующего в комплекте. Таким образом, если boost не будет использоваться на полную, лучше юзать другие, более специализированные библиотеки.
Литература: Ариндам Мукерджи - Learning Boost C++ Libraries (на ангельском) (2015) - https://goo.gl/b0gPN1
Qt
Существует швабодный кроссплатформенный фреймворк-надмножество C++ под названием Qt. Он содержит довольно большое количество компонент (для работы с сетью, базами данных, для юнит-тестирования и др.), но киллер-фичей и основным полем его применения являются возможности по разработке графических интерфейсов. Qt сам по себе, как расширение языка, предоставляет для этого более удобные средства, чем обычные библиотеки, а использование специализированных IDE наподобие Qt Creator позволяет в буквальном смысле собирать интерфейсы мышкой, а код писать только по существу.
Тем не менее, использование Qt нельзя однозначно назвать хорошей практикой. Во многом это уже не C++, а другой язык, со своими концепциями и паттернами. Qt-код требует дополнительного препроцессинга при помощи встроенных в Qt утилит (т.н. метаобъектная компиляция), поэтому не получится просто подключить Qt как обычную библиотеку и использовать свой любимый компилятор без дополнительного софта. Нельзя сказать, что это существенное препятствие, но есть мнение, что использование Qt нарушает дух C++, раздувает машинный код и порождает макак-любителей кодогенерации.
В настоящее время основные версии Qt - 4.8 и 5.х, полной обратной совместимости между ними нет как в пистоне, ага.
Несколько специализированных библиотек для часто встречающихся задач. Все маленькие, быстрые и простые в освоении: libcurl - сишная библиотека для работы с сетью (существует также curlpp - крестовая обертка для нее, но использовать ее не стоит, ибо разработка заброшена еще в 2009 году) - http://curl.haxx.se SFML - работа с графикой и аудио - http://www.sfml-dev.org FLTK - графические интерфейсы - http://fltk.org
Новая книга Мейерса заменена на русскую версию. Добавлена книга Абрахамса-Гуртового по метапрограммированию. Code::Blocks заменена на CodeLite из-за ее очевидных преимуществ.
А вы скажите мне посоны, после книги для ньюфагов от Страуса (2011 г.), что лучше почитать вообще? Где-то я слышал, что книги Мейерса хорошо дополняют друг друга и было бы неплохо (нужно) начинать читать с первого издания. Поясните в общем.
>>607087 м... я думал var это типа общая переменная с устройством, посмотрел внимательней - ты ее вроде собрался куда-то отправлять после того как твой do{}while отработает. Так вот, он никогда не закончится, точнее тот код что после него никогда не выполнится.
>>607095 Да var должен отправится в COM порт где его считывает устройство. А этим do while, я хотел, что бы моя консольная менюшка, банально, не сворачивалась после выбора варианта.
>>607095 Да, чего-то я всё по уебански сделал вчера. Сегодня проспался и сделал более или менее нормально - отправку отдельной функцией, которая принимает значение var из цикла меню.
Какие есть средства под Windows для создания приложений с GUI на C++, чтобы в 1 .exe собиралось? QT - много ебли со статической линковкой. Borland C++ - Платное, много ебли с подключением библиотек, к примеру для serial port.
http://ideone.com/4GFT6O Как заставить это скомпилироваться? Я переопределяю create и говорю - вот так можно создавать объект типа Pair, но он ругается, мол, у базового-то класса нифига не подходит сигнатура.
>>607332 Твоя базовая фабрика умеет создавать только объекты классов с одним аргументо в конструкторе. Расширеную фабрику ты наследуешь от базовой фабрики для типа pair у которого нет конструктора с одним элементом, следовательно не возможно создать базовую фабрику для типа pair, следовательно нельзя от нее отнаследоваться. Тебе или нужно дать типу pair конструктор с одним аргументом типа int http://ideone.com/yQu8rh или инстанциировать фабрику от другого типа, а не pair.
>>607335 Юзай какой-нибудь Revo Uninstaller. А разгадка одна - тот, кто очищает папку Program Data в погоне за местом, будет страдать из-за удаленных файлов деинсталляторов.
Несколько вопросов от ньюфага. 1) Obj-C используется только в эплопроизводстве или широко распространён? 2) Чистый Си проще плюсов? 3) Насколько у Си и плюсов различная сфера применения? Можно на одном делать всё то же, что и на другом?
Дали тестовое задание, надо написать с использованием дирехт х. Опыта с дирехт х у меня естественно никакого, что почитать по этой теме? С чего начать?
>>607684 Ты какой-то дурак. Я не знал ни си, ни плюсов, но пошёл и начал ебашить тестовые задания. Быстро вкатился, хоть и было много проблем. Через два года уже пролистал книжку.
Сдал младшего брата учиться в какую-то компьютерную академию, хуй его знает, короче. Так вот, дали там ему тест, который я сам на 10/10 решить не могу, только 8/10. Шозахуйня? Тестрилейтед.
1. Что такое тип данных? Название переменной Название константы Вид содержимого и допустимые операции над ним Значение переменной или константы
2. Что такое переменная? Значение Имя Именованная область памяти, предназначенная для хранения значения Именованная область памяти, предназначенная для хранения значения, которое может меняться по ходу работы программы Идентификатор
3. Что такое литерал? Значение в памяти Значение в исходном коде программы Имя переменной Имя константы Тип переменной
4. Что такое оператор? Вся программа #include < iostream > Функция main() Действие над операндами (переменными, константами, литералами) cout
5. Правила создания идентификаторов Любые буквы, цифры, знак подчеркивания, знаки препинания, пробел, не может начинаться с цифры Латинские буквы, цифры, знак подчеркивания, знаки препинания, пробел, не может начинаться с цифры Кириллические буквы, цифры, знак подчеркивания, знаки препинания, пробел, не может начинаться с цифры Латинские буквы, цифры, знак подчеркивания, не может начинаться с цифры Кириллические буквы, цифры, знак подчеркивания, не может начинаться с цифры
6. Какие действия выполняет оператор присваивания? Выводит присваиваемое значение на экран Предлагает пользователю ввести значение с клавиатуры Объявляет переменную Помещает указанное значение в переменную Стирает указанное значение из переменной
7. Как определить константу? Указать ключевое слово const и ее тип Указать ключевое слово const, ее тип и значение Указать ключевое слово const, ее имя и значение Указать ключевое слово const, ее тип и имя Указать ключевое слово const, ее тип, имя и значение
8. Размер типа unsigned short 1 байт 2 байта 4 байта 8 байт Зависит от платформы
9. Размер типа double 1 байт 2 байта 4 байта 8 байт Зависит от платформы
10. Размер типа int 1 байт 2 байта 4 байта 8 байт Зависит от платформы
Посаны, хочу быть мобайл разработчиком, но в моей мухосрани вакансий кот наплакал, зато есть отличная вакансия в топовую компанию на плюсах, с крутым продуктом для 3д сканеров и принтеров в медсфере, у компании куча офисов в зарубежье, половина ивропы, США и Кореи с Япониями. Вопрос таков - мне стоит дрочить мобайл в надежде найти работу или лучше пойти на С++ или жабу в компании рядом, получить опыт работы с умными ребятками и потом сделать перекат в интересную мне сферу? Один успешный погромист из амурики говорил идти в С++ компанию, потому что в 95% реально интересных и крутых проектов даже в мобайле, вебе или подобном всё равно желательно уметь в языки типа си, плюсов или жабы, потому что это СТАНДАРТ, а первые два ещё и закладывают хорошее понимание работы "под капотом".
Ну и приводил в пример вакансии, всюду вроде рили написано в требованиях что-то типа: - 3 года опыта работы с одним из языков типа C++/Java/C#/Scala/etc - 3 года опыта работы с Python/Objective-C/etc ну или другой язык по которому вакансия Карочи, как отдельные пункты.
Он всё правильно мне сказал и рили стоит потратить время на это? Будет ли отдача реальная или сразу в мобайл пиздовать и хуи забить? Сильно ли прогресс "прокачки скилла" зависит от старших коллег которые будут пинать? Спасибо.
опыт работы - разработка говна при универе, лолне лаба1, это говно все ещё юзают для документооборота
>>607897 Ах да, спрашиваю у вас, потому что думаю тут есть те, кто писал на плюсах и сделал перекат или пишет на плюсах и сделал перекат с другого языка, поэтому может поделиться опытом пользы работы с подобными языками.
>>607897 В мобайл идут не от большого ума - или вакансия попалась (рынок больше), или хотят фрилансить (порог вхождения ниже), но вот специально туда идти... Что такое мобильный софт? Примитивные аппликухи, которые за любым чихом лезут на свой бэкенд через интернет. Редко что-то считается на месте, но тут, опять же, придется портировать код с бэкенда. По сути ты будешь бесконечно дрючить UI, а это на любителя. Игры тут - верх технологичности. Правильный ответ - идти на С++ вакансию и, если получится, ты сам забьешь хуй на этот мобилософт.
>>607683 Воу, воу, полегче. Откуда у тебя такая хуйня? Что это? Почему DX, а не OGL?
>>607720 Для тебя и таких, как ты, придумали OpenGL. Который практически никак не отличается. Откуда вы вообще берётесь?
>>607895 Ещё один. Во-первых, не пали годноту, уёбок, пусть OpenGL дрочат. Во-вторых, откуда вообще ты взялся? В-третьих, Франк Луна тут не сильно поможет, ему всё-таки не 3D-модельки нарисовать надо, а интерфейсный элемент. А для этого есть Direct2D с совершенно другими правилами, методами и функционалом.
>>607896 Скомпилил статическую версию QT 5.4 по инструкции http://habrahabr.ru/sandbox/95171/, наткнулся на такую ошибку при попытке собрать проект: :-1: ошибка: dependent 'D:\Qt\5.4\Static\lib\Qt5Widgets.lib' does not exist. И действительно. Там нет ни одного файла с расширением lib, есть только Qt5Widgets.prl. Что делать в этом случае?
>>607982 Какой же ты мудак блять, в вопросе написано, что сделать надо с использование дирехтх, не опенжл, а дирехтх, нет надо выеба гнуть, на говно исходить.
>Почему DX, а не OGL? Потому что так решили в той фирме, не нравится - скажи им это, они тебе непременно не перезвонят.
>>608056 Ну и еще, запусти MaintenanceTool.exe и проверь, точно ли ты установил все библиотеки и их исходники, и той ли версии. У меня все выглядит как на пике. Кстати обнови там все до последней версии через этот же тулз.
>>608225 >lib .lib и не нужны. А ты свой какой-то проект выбрал? Попробуй скомпилировать тестовый. У меня задача была разобраться с сокетами. Очень уж тут удобно вся эта тема делается. >>608230 Ну бывает. Микро под MVS наверное компилируется.
Поясните за make_shared и move. Вот создаю я объект, допустим конфиг. Реализация мудельной библиотеки в конструкторе переносит через move мой конфиг к себе.
Кодес такого вида: hui(vasya228 config) : m_hui(make_shared<vasya228>(move(config)))
Собсна, если инициализировать конфиг на стеке я не потеряю эту хуитку после его очистки? я знаю что это всё хуйня и можно не ебать мозга, но ведь 228 оптемезацея скорасть...
И ещё, поясните нахуя нужны конструкции вида &&hui или zalupa при исп. обычных структур/классов, а не двумерных массивов.
Есть ли какой-то гайд по FLTK на русском языке? А то очень тяжко на английском, учитывая, что материал для меня совершенно новый, я не формоёбствовал и пока писал только хеллоуворды.
Чуть не умер читая этот тред лол. Конфеткой поводился и она в горле застряла. Я хуй знает как этот леденец оттуда вынул, но я дышать не мог пока он не выскочил.
>>608625 >вот у крестов да - полный пиздец. Работаю 8 лет с крестами, ни разу не видел пиздеца. А хуевый программист на чём угодно невнятного говна напишет.
>>608089 Блядь, а нахуй мне их перезванивание? Наоборот, я хочу, чтобы эта фирма уже никогда не смогла никому перезвонить. Пиздец, в России только человек 5 знают DX на моём уровне, а благодаря этой компании появляются такие >>607720 личности, которые своими "А Я ТОЖЕ ХОЧУ" портят всю элитность DX.
>>608226 Да похуй. Главное, чтобы в мой DX не лезли.
Вечер в хату, крестаны. Есть два хедера с двумя разными классами, как сделать взаимодействие между ними (преобразования один в другой)? Я пытался объявить хедеры и там и там, в итоге ошибка компиляции по понятной причине. Можно что-нибудь сделать и не пилить отдельный файл для них?
Зачем нужно перечислять переменные одного типа через запятую? Я посмотрел адреса, в памяти они последовательно не лежат. Инты, например, лежат не через 4 байта, а через 12.
>>607053 (OP) помогите пожалуйста разобраться с проблемой в коде, в нём есть базовый класс и 3 производных класса, нужно переопределить метод get_name так, чтобы при его вызове выводилось название производного класса, но почему-то выводится название базового класса, причём код на строках 83-87 работает корректно, а вот код на строках 92-110 уже не работает, хотя вроде всё также пишу http://pastebin.com/Dtw12vvh
>>608730 Потому что (@ - звёздочка) T@ mas[N]; - массив указателей (mas имеет тип T@@, грубо говоря, то есть указатель на массив указателей) а T@ mas = new T[N]; - массив объектов (mas имеет тип T@, то есть просто указатель на объект) Итого в твоём примере на строках 92+ or имеет тип instrument@, а значит or имеет тип instrument, т.е. объект, а не указатель
>>608735 а как сделать так, чтобы get_name выдавал имя производного класса? Если писать вот так http://pastebin.com/59AU70X8 то выдаёт название базового класса
>>608744 Используй массив указателей на тип instrument http://ideone.com/5wSYGi Когда ты объявляешь массив элементов типа instrument то в этот массив можно записать только элементы типа instrument, и производные от него конвертятся при записи в базовый.
>>608696 Да ничего особенного. Ещё до того, как поступил в универ, хотел заниматься графикой. Первые пару лет хватало небольших попыток начать учить OGL, но в Dev C++ подключение сторонних либ не работало, а Visual Studio я считал ужасным проприетарным поделием майкрософта, потому что так сказали в универе. Где-то в конце второго курса сказал друзьям, что всё, этим летом выучу OpenGL, окончательно решено.
Летом, когда я в очередной раз попытался подключить либу в Dev C++ и потерпел неудачу, я решил найти другую книгу. Может, где-то написано, почему у меня выставлены флаги компиляции вида -lgl и -lglut, все либы лежат в папке, но проект не собирается? Может, лучше начать с общей архитектуры построения игровых движков, а уж потом разберусь?
Скачиваю какую-то книгу, русскую, года 2004. По движкам. Где на первой странице указано, что для чтения этой книги необходимо иметь знание DirectX.
И тут меня осенило. А что, если вместо OGL я буду знать DirectX? Это же гениально. Ведь после того, как я освоил Qt, я начал любить WinAPI. А тут мало того, что использование WinAPI было необходимо, так ещё и этот выбор ощущался как переход на тёмную сторону. Что я иду против системы. В то время, как везде говорят об осточертевшей кроссплатформенности, в то время, как все желающие освоить графику выбирают OpenGL, "потому что свободное ПО", в то время, как все инди-игры на OGL и везде, где преподают графику, учат OpenGL, в это время я выбираю DirectX. Наплевав на кроссплатформенность - она не нужна, у меня нет ни одного друга, который бы всерьёз использовал линукс или макось не для рабочих задач. Наплевав на закрытость кода - меня за два года в универе успели заебать промывкой мозгов на тему, какое же хорошее свободное ПО и как же важно использовать линукс. Отсосите. Я ухожу в DirectX!
Ищу литературу. Нахожу книгу некоего Горнакова, по DX9. Начинаю читать, разбираюсь с каждой неясностью, переписываю вручную код, комментирую каждую строчку. Как ни странно, первый проект даже скомпилировался. Иду дальше. Квадрат, кубик, освещённый кубик... Дохожу до главы с выводом текста, застреваю.
Пытаюсь разобраться. Функция в книге принимает три аргумента, функция в документации MSDN - девять. Гугление дало понять, что с тех пор, как книга была издана, эта функция успела поменяться. Что ж, думаю, надо бы тогда попытаться написать в 9 аргументов.
Не заработало. Ибо функция принимает в качестве параметра спрайт, про спрайты в книге ничего нет, а документация ссылается на одну статью, та на другую, та на третью и разобраться в таком количестве информации при недостаточном количестве начальных знаний нереально.
Решил спросить здесь, на дваче. Говорю, вот, есть книга 2003 года, да, она устарела, но всё нормально, после её прочтения у меня будет достаточно начальных знаний, чтобы было всё понятно по документациям в этой области. Отвечают мне, что я даже не представляю, насколько она устарела, что сейчас всё делается по-другому. Дал мне ссылку на книгу(кстати, довольно известного в этой области автора) на английском языке.
Думаю, ладно, английский - не такая уж и проблема. Конечно, это моя первая книга на английском, но надо же когда-то начинать. В любом случае, всегда есть переводчик.
Перед прочтением заглянул в оглавление. Тесселяция! Геометрические шейдеры! Ambient Occlusion! Охуеть! Раньше для меня это были просто красивые сложные термины, а теперь я на самом деле буду в этом разбираться! И использовать это! Я был, как это говорят по-английски, really excited. То есть пиздец в предвкушении. К слову, в книге говорилось, что необходим Visual Studio. Понимая, что это того стоит, я его поставил. Больше я Dev C++ не запускал никогда.
Начал читать. Внимательно, осмысливая каждое предложение и делая каждое упражнение. С каждой главой я всё больше охуевал от собственной крутости. Я понимал, что вот оно, что я наконец-то нашёл то, что мне интересно по уши. Что я наконец-то счастлив, анон.
К тому времени, как закончилось лето, я прошёл несколько глав. Планы по всей книге за лето немного провалились, но я не сильно переживал. Главное, что я встал на правильный путь. Прихожу в универ, говорю друзьям: "Помнишь, я хотел выучить летом OpenGL? Я выучил DirectX!". Как ни странно, они не были сильно удивлены.
Ну а дальше ничего особенного. Как закончил книгу, пошли следующие. Более высокого уровня, с узкоспециализированнымм алгоритмами вроде сглаживания во время постпроцессинга. Названия книг говорить не буду, мало ли кто-то тут их решит прочитать. Пусть сами ищут.
Ну вот как-то так. И да, аноны, в 2016(да и в 2015) году заниматься DirectX несерьёзно. OpenGL объективно лучше - он и кроссплатформенный, и стандарт открыт, и вообще DX не нужен будет, как только выйдет Vulkan.
Это конечно круто, поздравляю и всё такое. Но я надеялся услышать как ты в работу вкатился. Или ты там сам постигаешь дзэн? Рендеринг и R&D в этой области на постсовке мертво вообще или как? Сам с бульбастана
>>608774 Сам дзен постигаю. Вряд ли я бы пошёл на обычную работу со всеми этими дедлайнами, тимбилдингами, корпоративной культурой и прочей чешуёй, которая не даёт почувствовать себя свободно.
Ну и да, где ты видел из России за последние лет 5 что-то, кроме игр на мобилки?
>>608778 Блять, я-то думал ты там бабло на этом пилишь норм и не хочешь, чтобы конкуренты в сферу лезли. Ну варгейминг тот же. Корабли в Питере, танки в Минске. Да и хватает, наверно, контор с не мобилками и социалками
>>608778 >из России за последние лет 5 что-то, кроме игр на мобилки? еще в социалках игрухи есть еще такая тема как аутсорс игрового контента еще иногда саппорт долгоживущих проектов типа ммо скидывают (но редко), включая таскинг (багфиксинг и фичреквестинг)
>Напишите функцию, которая обрезает пробелы в конце переданной ей строки. Функция должна быть написана в расчёте на работу с очень длинными строками с очень большим количеством пробелов, оптимизирована по количеству обращений к памяти. Сигнатура: void TrimRight( char *s ); P.S.
Дан файл, в нем содержится набор слов. Отсортировать эти слова по алфавиту, использовать односвязный список, и вывести результат в другой файл и на экран. Обязательно должны присутствовать: класс, конструктор. Анончики, помогите. Лаба горит
http://pastebin.com/HZ7gQ4xa Препод на паре пояснял этот алгоритм создания выпуклой оболочки. Я её пропустил и нихуя не понял. Где можно найти гайд по работе этого алгоритма? Сам пытался загуглить, не нашел.
>Напишите функцию, которая обрезает пробелы в конце переданной ей строки. Функция должна быть написана в расчёте на работу с очень длинными строками с очень большим количеством пробелов, оптимизирована по количеству обращений к памяти. Сигнатура: void TrimRight( char *s ); P.S.
ответ, что не так: >"Несмотря на то, что решение является оптимальным по количеству обращений к памяти, оно во-первых выдает некорректный ответ на некоторых строках, а во-вторых может повредить динамическую память."
Парни, подскажете, что ещё можно с этим можно было сделать?
Несколько вопросов от ньюфага. 1) Obj-C используется только в эплопроизводстве или широко распространён? 2) Чистый Си проще плюсов? 3) Насколько у Си и плюсов различная сфера применения? Можно на одном делать всё то же, что и на другом? 4) Насколько у шарпа и плюсов различная сфера применения? Можно на одном делать всё то же, что и на другом?
>>608890 1) >>только в эплопроизводстве 2) >>проще 3) >>Можно. Сфера - у крестов весть линух + вся системщина на современных осях, плюсы - более прикладные и среднеуровневые вещи (обычный гуй софт, сервера, игрушки). 4) >>различная Не совсем. Шарп - чисто прикладной язык, бОльшая часть софта на сперме, тяжелые игрули 40-60% области плюсов на нем не попишешь.
>>608878 Ну дык не реаллоцируй память вообще. Просто замени первый символ в последовательности замыкающих пробелов на \0. И для этого можно идти с конца строки, тогда не обязательно ко всем символам строки будет обращение
Чтобы идти с конца строки, надо для начала получить индекс последнего элемента. Это делается проходом до конца, если я не ошибаюсь. А применение функции - strlen, это ведь тоже проход до конца?
> Ну дык не реаллоцируй память вообще.
С этим согласен. Наверное не стоило выёбываться. Но они говорили про оптимизацию и т.д. Подумал, что правильно было бы очистить память, хотя применение релоак тоже тяжкая вещь. кажется
>>608943 Что значит "не принципиально"? Если надо куда-то в файл выдавать, то и занулять ничего не надо. Если на консоль, можно тоже с помощью функций IO. А откуда она берётся? Начальную длину можно узнать без strlen?
>>608977 Похуй. Первый язык выбирается не чтоб что-то сделать, а чтоб научиться основным принципам и написать несколько рабочих программок. Питон для этого норм, простой и без мозгоебства. Кроме того, не слишком сложные технически игры на нем отлично работают (и даже библиотечки/движки есть), а сложную ты, будучи ньюфагом, не напишешь. А когда уже не ньюфаг - в другой язык перекатиться несложно.
>>609070 Чему завидовать? Мне нет дела до твоих знаний, ни дх, ни огл не интересны. Просто >Названия книг говорить не буду, мало ли кто-то тут их решит прочитать. - это же пиздец, самому-то не смешно разве?
>>609073 Ну смотри. Сейчас я чувствую себя счастливым. Потому что играю не по правилам - в мире популярности OGL среди любителей и даже многих профессионалов я использую DX. А теперь представь, что я расписал здесь всю годноту. К чему это приведёт? А к тому, что в DX может набежать толпа ололокающих школьников. Которым дали прямой рецепт, как стать илитнее и умнее. Дальше они своим неадекватством начнут дискредитировать DirectX. И в итоге сложится общественное мнение, что на DirectX пишут только ололокающие школьники.
К чему это приведёт? А к тому, что мне даже заикаться нельзя будет про своё хобби. Вместо уважения или прямых посылов нахуй я буду слышать лишь насмешки. И всё, перестану быть счастливым. Поэтому нет, нельзя.
И да, как же я рад, что по DirectX нет нормальной литературы на русском языке. Как же я рад.
Valve, тонны инди-разрабов от Эдмунда Макмиленна до Klei Entertaiment, даже вот Crytek нанимали OGL-разработчиков. Андроид и iOS кодинг - OpenGL. Все университетские курсы в любом МГУ - OpenGL. Научная деятельность - OpenGL. Да блядь, даже запрос "3D Graphics tutorial C++" в гугле выдаёт OpenGL!
На DX пишут только ультра-AAA разработчики. Титаны индустрии. Ну и я.
>>609177 Если иметь правильные источники информации, возможность практиковаться и достаточно ума и времени, чтобы всё это освоить, то можно овладеть чем угодно. Было бы желание.
Возможность практиковаться в DirectX, к сожалению, есть у каждого. Времени у ололокающих школьников полно. Ум и желание у некоторых экземпляров попадается. Остаётся информация. Нельзя допустить, чтобы любой качественный источник информации стал известен публике. А не то последствия будут непредсказуемы.
>>609210 >все едят на ужин еду, а я говно, но на самом деле это круто, ведь только я ем говно, значит я клёвый Нахуй иди, зелёный.
(Автор этого поста был предупрежден.)
Плюсач, подскажи какую-нибудь простую графическую 2D библиотеку, с поддержкой линукса. Не для виджетов/окон, а именно с возможностью отрисовки простейшей графики а-ля фон, спрайты, ну и возможность управлять с клавиатуры(выбирать пункты в меню и пр.). Нашёл много разных, однако самый популярный, а главное, кросс-платформенный, если я правильно понял, SDL. Или же лучше использовать какие-нибудь 2D игровые движки а-ля кокос, оксуген и пр.? Цель - простейшая битва а-ля Final Fantasy. Глаза разбегаются во всём этом разнообразии, пробовал использовать SFML, но в силу разных причин не вышло - рукожоп, однако.
>>609214 SFML не слишком отличается от SDL. Если будешь писать на плюсах, то бери SFML. Вообще они оба неплохие, но SFML куда более объекно-ориентированный. Плюс это или минус для тебя — решай сам.
Больше я опыта ни с чем не имел, кроме этих двух. ОБа кроссплатформенные, да.
>>609209 Можешь называть меня как угодно. Но у меня есть знания. Нет, не знания ваших попсовеньких Boost или Qt, не энтерпрайзной параши и даже не OpenGL, информация о котором доступна любому быдлану. Нет, я у меня есть знания закрытого, проприетарного стандарта. Многих закрытость пугает. Многие боятся, что вдруг придётся платить отчисления Майкрософту за любую написанную программу? Но я не такой. Я знаю правду. Я не боюсь. И я охуенно счастлив, что у меня есть DirectX.
>>609219 Это скорее плюс. Спасибо за ответ. Разобрался, нужно было добавить пару ключей при компиляции. Не подскажешь каких-нибудь годных статей (можно на английском) для начала?
>>609239 Не знаю, я просто читал документацию с официального сайта SFML. Начинал я с SDL по туториалам Lazy Foo', потом перекатился в SFML без всяких туториалов, просто читая документацию.
За 10 лет я убедился, что в майкрософт вкладывать свои силы нет никакого смысла. Есть нормальная проприетарщина - матлаб, например, но MS всегда скажет через 2 года, что все, что ты учил - говно.
>>609247 Под "нормальной проприетарщиной" ты подразумеваешь протухание десятками лет на одном и том же пакете одной и той же версии, делая всё то же самое, что и 10 лет назад?
Ну и в конце концов, посмотри на WinAPI. Потрясающая библиотека. Актуальна до сих пор. А ведь написана в начале девяностых.
И да, у тебя есть своя голова-то? MS скажет. Ну и пусть говорит, что хочет, как это тебя-то касается? Запретить писать на том, что ты используешь сейчас, тебе никто не сможет. Более того, чем больше кодеров уходят на "инновационные средства разработки ПО", тпи более элитен ты.
Ребятки, не нужно, пожалуйста, срать сотнями искрометных постов в духе ")))))", даже если вам не нравится, что написал другой анон. Ему вы хуево не сделаете, а тред утопите раньше срока.
>>609261 Но сидеть голой жопой на куске говна тоже может каждый дурак. А вот писать на WinAPI в 2015 - не каждый.
>>609264 В мире ПАТТЕРНОВ ПРОЕКТИРОВАНИЯ,КОМПОНЕНТНОЙ АРХИТЕКТУРЫ,СТАНДАРТОВ НАПИСАНИЯ КОДА и ПОКРЫТИЯ КОДА ЮНИТ-ТЕСТАМИ за одно лёгкое безумие, которое есть у WinAPI, стоит её любить.
>>609273 Ты с компграфа штоле, маня? Пока ты дрочишь свою мелкомягкую хуитку, даже тянки успели вкатиться в серьезный бизнес. https://cs.msu.ru/news/2280
>>609256 >Потрясающая библиотека. Актуальна до сих пор. А ведь написана в начале девяностых. Ехал воид через воид Видит воид в реке воид Сунул воид воид в дефайн Цапнул дефайн войд за VOID Обосрался воед-ВОЕД, создал 10 указателей на строку А указатели на строку - не просты, а золоты близнецы.
>>609279 Ну что, молодец она. Только вот её тема мне не слишком интересна.
>>609276 Не станет, но может. А вот в WinAPI может не каждый.
>>609281 Так это и круто. Капс выглядит брутально. Венгерская нотация выглядит пленительно и сложно. А сама архитектура? Блядь, да в сраном Си использовать полноценные классы! Причём так оригинально - по указателю лежит структура-дескриптор, а за ним данные. А теперь скажите, хоть кто-нибудь, кроме майкрософта, додумался бы до этого? А?
>>609291 >Не станет, но может. А вот в WinAPI может не каждый. Каждый может, кому интересна сфера. Но редкий даун жрёт говно, когда оно давно протухло.
>кто-нибудь, кроме майкрософта, додумался бы до этого? А? Уносите толстого. Восхищаться всяким говном можно сколько угодно. Я ковыряю блядские байты богом забытой игры, которой 20 лет. Я тоже восхищаюсь структурой и всеми ухищрениями и взаимозависимостями, которые так нахожу, реверся код. Это невероятно и охуительно, в это тоже НЕ КАЖДЫЙ СМОЖЕТ, но это нахуй никому кроме меня не нужно и я это понима. И ничего в этом илитного нет. Но ты ещё и слагаешь как мудак.
>>609291 >использовать полноценные классы Неполноценные. В отличие от крестов, тут не будет compile-time проверок, а с безопасностью теряется и вся суть классов.
>>609294 >в это тоже НЕ КАЖДЫЙ СМОЖЕТ, но это нахуй никому кроме меня не нужно и я это понима Но это богом забытая игра. А это библиотека, о которой знают все. Да если им дать информацию, они, как псы, вцепятся в неё. >И ничего в этом илитного нет А вот в этом ты неправ. Даже то, что делаешь ты, вполне элитно. Гордись этим.
>>609303 Но блядь. ЭТО СИМУЛЯЦИЯ КЛАССОВ НА СИ! Это ли не охуенно? Это всё равно, что на микроволновке ездить до магазина. Взрывает мозг.
>>609309 Ты не понимаешь. Глупо дрочить на фичи, которые ничего не дают и сделаны просто, чтобы все охуели. Классы в си это блажь, потому что в C++ уже есть нормальные классы, но при этом оверхеда перед си нет, что позволяет использовать кресты. А, например, шаблонная ебля в крестах - не блажь, потому что такое есть только в более медленных языках, пусть даже более удобно реализованное. Если тебе нужно просто выебнуться, а не дело сделать, то используй какой-нибудь Brainfuck, с ним все равно будет запутаннее.
>>609342 >Монополию? Не только. Очень много негативных последствий. И для направления и для развития. Но ты прав, что когда специалистов слишком много, это плохо. Люди перестают цениться, не смотря на то, сколько они потратили времени на обучение и насколько высококлассными они являются. Тут поможет завышенный порог вхождения, допустим на собеседованиях, принимать по результатам олимпиадных задач, как это делают во всяких гуголах. Но ты ведь сам тогда рискуешь оказаться не у дел, илита.
>>609352 >не только двигаться дальше, но и облегчить жизнь тому дурака, который пойдет по твоим стопам Я забыл проаргументировать это.
Так вот — вернёмся к той забытой богом игре. Кажется, в 2000 или около того был один парень, достаточно глубоко разобравшийся в вопросе. Он мало что за собой оставил, поэтому мне пришлось копать свой тоннель. Однажды, я всё же разыскал того парня. Он тогда уже дропнул работу в senile team (старая геймдев контора) и уехал в китай. Я тогда уже запутался, но всё же смог с ним связаться. На мои вопросы он не ответил, сказав, что уже забросил всё это. Не удивительно, ему уже и лет-то дохрена.
Я разобрался во всём самостоятельно, но в любом случае очевидно, что прогресс не представляется возможен без передачи знаний.
>>608744 Код не видел (сижу с тостера), но надо просто объявить get_name как virtual и хранить в массиве указатели (а объекты создавать в куче например)
>Плюсоебство - это как православие. Когда протестантизм завещает работать над собой и создавать блага, славя величие Господа, православие требует от последователя искупления греха, посредством непрерывного страдания, как страдал Иисус неся свой крест.
>>609887 >Хуёвая затея. сделать stl стандартной библиотекой - это была вторая самая большая ошибка страуструпа и комитета ну а если практически подходить к этому, ведь приложения пишутся на основе какого-либо фреймворка (что куте, что связка atl+wtl, что mfc, что борландовские фреймворки, да мало ли их), а когда вдобавок начинают юзать stl, в результате происходит смешение стилей программирования (и не только на уровне синтаксиса, но и семантически) самые мерзкие потроха прог что я видел - лапша из stl, си-кода с вызовами стандартной сишной библиотеки, winapi а поверх этого какой-нибудь фреймворк еще самые охуенные проекты (и соответственно, чуваки которые их делали охуенны) - юзали, положим борландовский билдер, дак они писали собственные пакеты и компоненты, так же как и стандартные пакеты в билдере, а все сторонние библиотеки, что нужно было подключать + все winapi заворачивали в это, получался код единого стиля или тоже самое, но проекты были запилены на связке atl+wtl
>>610094 Так ты, блядь, уточняй. У нас, например, ядро проекта запилено на C++ & STL & Boost. Никакого куте, мфц, винапи и прочего. Собирается в толстую dll'ину с известным интерфейсом. А вот на это сверху уже лепится гуй на куте. И за стл в гуе у нас больно дают по рукам, ибо вот тебе куте - его и люби.
>>610094 Ой бля. Если ты не в курсе, что модульность - одна из главных концепций ООП, нахуй ты что-то пишешь? Если с тобой работают быдлокодеры, которые срут под себя - это не проблема используемых библиотек.
>>610103 а теперь открывается первая и самая главная проблема крестов - а именно отсутствие abi, что у вас на границе модулей? - скорее всего, голый сишный интерфейс и что получается - в библиотеке stl + boost, на границе модуля - голый си, а гуй на qt, итого получается та же лапша а теперь сравни это с тем когда ты используешь объектные системы сделанные на сях - com под винду и gtk под юникс-семейство не говоря уж про динамическую загрузку модулей в языках ml-семейства, сборки в дотнете, загрузка классов в ява
>>610318 Ты какую-то глупость спизданул сейчас. Лапша будет, если в коде рядом находятся разные концепции. Когда разные модули написаны разными концепциями и даже на разных языках - очень хорошо, потому что в каждом модуле можно использовать инструмент, заточенный под определенную задачу. В самых узких местах нахуярить на си, да с simd-инструкциями, в регулярном коде юзать stl и другие высокоуровневые либы, а гуй вообще запилить на каком-нибудь медленном говне, но зато кроссплатформенный. Различие в концепциях между модулями не должно смущать, ибо если ты осилил одну концепцию/нанял единственную макаку, то тебе энивей все будет казаться гвоздями, и ты получишь более серьезные проблемы, чем НЕОДНОРОДНОСТЬ КОДА.
>>610538 прямо на твоем примере: пусть у тебя в либе есть какой-то рассчет - а значит это несколько структур данных + пара алгоритмов, работающих над ними вы, как умные мальчики, все заворачиваете это в stl+boost c шаблонами, функторами вместо циклов, классами с иерархиями и перегрузками, красота в общем а потом на границе модуля все это приходится приводить к старому си совместимому интерфейсу, по сути возвращаясь к функциям и void* а потом в самой проге все это еще раз приводится к qt интерфейсам получается, что помимо того что нужно закодить, нужно все это еще два раза обернуть, у вас там, как говорять layer код а теперь сравни - я пищу com-совместимую библиотеку на atl и а гуй рисую на бейсике, примерно то же самое можно сделать на gtk, или пишу сборку на любом дот-нет языке, и юзаю ее в любом приложении на любом дот-нет языке, уж не говоря про возможность динамического подгруза класса в явке, возможность динамически грузить модули в языках ml семейства или делать вообще что угодно с исполняемым образом липс-машины (добавлять, изменять, дебажить одновременно выполняемый код в данный момент) по сути, хочешь юзать modern с++ сейчас - у тебя один выход, а именно делать так, как сделали в casablanca - все въебашено в один большой исполняемый модуль + а наружу торчат веб-сервисы
>>610620 Ну давай разберем по частям. 1. Гую не нужно знать внутреннее представление, поэтому приводить ничего не надо. Гуй в любом случае должен получить сущность, которую ему рисовать, а хранится она в map, int [] или vasyan_yoba_container - его не должно ебать. Если это происходит, то у тебя хуевая архитектура, поздравляю. 2. Если ты просто хранишь данные линейно, то ты используешь vector/basic_string/что-то подобное. У них есть методы для доступа к внутреннему си-представлению, указатель на которое можно без проблем передать в другой модуль, который понимает си-интерфейс. 3. Если ты хранишь интеллектуально (какие-нибудь множества или списки там), то да, ты не сможешь передать их между модулями, если использовались разные версии компиляторов. Но если ты пишешь то же самое без stl, фактически на чистом си, то ты проделываешь больше работы, чем для простого написания обертки в три строчки. Да еще и багов словишь. 4. "Ну и хуй с ним", - скажешь ты, - "Но запилить ABI-то все равно могли, не убудет же!" А вот нихуя. Если ты посмотришь исходники stl, то увидишь, что там достаточно много платформозависимого кода, плюс его все время перепиливают, чтобы достичь моар прироста в производительности. Если задать жесткую спецификацию, то будет существенная потеря скорости в будущем, этого допустить никак нельзя.
>>610651 Потому что в вузах преподы-олдфаги так говорят и почти не преподают его. Потому что раньше до лямбд и auto STL и правда был не очень удобен. Вообще, все проблемы от неосиляторства же.
>>610641 >хранится она в map, int [] или vasyan_yoba_container - его не должно ебать как ты это говно пробросишь через границу dll? (а также классы, исключения, перегруженные функции, шаблоны и прочие "вкусности" с++) что с того что у вас в dllке нахуярен рокетсайнс на stl+boost, когда это все равно приходится обвязывать сишной обвязкой? я те про это толкую нету в крестах стандартного abi, как следствие нету возможности полноценной динамической загрузки кода (а приходится делать си-совместимую) все это приводит к тому что чуть ли не треть кода - просто тупо код обвязок на си были запилены охуенные объектные системы, самые известные - это com в винде и gtk в юникс системах в крестах делали более-менее функционирующий abi - например, mfc - ты не задумаываясь размещал классы в mfc dllки, пробрасывал исключения через модули, еще круче было сделано в борландовском vlc - там ведь была система пакетов, часть из них была даже визуальной и использовалать тупым накидыванием на форму, хотя все ведь это лежало в dll но проблема в том, что это были не стандартные abi и еще раз - хочешь юзать modern с++ - делай единый исполняемый модуль, если нужно взаимодействие с ним - пробрасывай какую-нибудь форму rpc или веб-сервис в остальных случаях будешь жрать говно
>>610651 потому что изначально stl - это концептуальная библиотека, сделавшая попытку реализовать функциональный подход в языке, который этому не больно то и располагает и огромной ошибкой было сделать из нее стандартную библиотеку языка
>>610620 Ерест какую-то пишешь. Вот есть у меня ядро которое, например, шифрует файл хитрым алгоритмом. Писано на c++ & stl & boost. На вход получает строку имяфайла (да пусть даже указатель на char), каллбэк для прогресса и каллбэк для вывода ошибки. Где там войды и преобразования? А если требуется та лапша, что ты расписал - то архитектор мудак, а кодер - индус ебаный.
>>610658 преподы-олдфаги так говорят, чтобы тупая студентота вникала в алгоритмы, а не кидала std::sort куда попало. А тупая студентота, как обычно, не вникает и решает что стл/буст - кака и трахается с собственными велосипедами.
>>610740 А нахуй вообще ваш С++ для GUI нужен, можно было бы на node-webkit сделать, как тот же Slack. Или там на JavaFX или каком-нибудь WPF. А c нативным кодом все равно что у ноды, что у джавы что у дотнета интеграция есть.
>>610740 >более-менее функционирующий abi - например, mfc Бляяяя, держите ебанутого, я его придушу. В мире нет НИЧЕГО, блядь, хуже мфц. Даже червь-пидор и тот тихо посасывает в сторонке.
>>610740 >нету в крестах стандартного abi, как следствие нету возможности полноценной динамической загрузки кода (а приходится делать си-совместимую) все это приводит к тому что чуть ли не треть кода - просто тупо код обвязок Вообще не так. Отсутствие стандартного ABI приводит к тому, что 1. В линуксе приходится собирать пакеты под системный компилятор. 2. В винде проприетарщину (если нужно закрыть код и распространять его как dll) собирают под 2-3 последние версии майкрософтовского компилятора.
>>610812 пытаюсь объяснить утыркам, почему кресты сосут - а именно нет стандартизированого abi, а значит всю их красоту (классы, перегрузку, шаблоны, исключения) хуй покидаешь за границы динамически загружаемого модуля (в си это механизм dll или so файлов если по простому) >>610815 вот этот хуй, похоже вообще не понимает о чем речь
>>610820 А зачем 10 раз статически линковать какой-нибудь OpenCV? Он должен лежать в /usr/bin/libopencv_core.so. Но он врет. Единственное требование - совместимость версий ABI компилятора.
>>610740 >com в винде и gtk в юникс системах Вот ты сам всю суть описал. Нет кроссплатформенности - сразу теряешь 2/3 пользователей. Мне и с либами платформозависимыми ебли хватает, например. >нету в крестах стандартного abi Нет, все правильно, и я написал тебе в предыдущем посте, почему это фича, а не баг. >охуенные объектные системы Это, мягко говоря, спорное утверждение. >как ты это говно пробросишь через границу dll Никак, очевидно же. За всю работу с контейнерами отвечает своя дллка, общение с другими происходит через функции, которые находят элемент/формируют вектор результатов, и уже их передают, например. В нормальной архитектуре так делается, даже если по факту линковка статическая и ты можешь получить доступ к этим внутренностям. Расширяемость, тестируемость, все дела.
Да проще тебе ебало набить, няша. Я ему про Фому, а у него дядя в Кiеве.
>>610744 Присутствие лучше отсутствия, так-то. >>610747 >>610754 Двачую. >>610759 Там емнип есть анальные ограничения, не? Что он должен быть POD или типа того. >>610822 Ну так перекомпилируй дллки каждый раз при смене компилятора, ты так говоришь, как будто это каждый день происходит. Вообще, настоящая независимость от версии компилятора обычно нужна довольно редко, в каком-нибудь диком легаси, которому уже не помогут вкрапления stl, лол.
>>610849 Да это не суть на самом деле. Статическая линковка от динамической в плане требований к ABI ничем не отличается - .o файлы от разных версий компиляторов С++ ты точно так же не сможешь слинковать статически, то же касается статических либ, то же и динамических.
То есть почитать ты можешь, но к обсуждаемому вопросу это отношения не имеет. Этот хуй почему-то думает, что код в .dll чем-то принципиально отличается от кода в другом .o файле, а это не так.
>>610857 >Ну так перекомпилируй дллки каждый раз при смене компилятора, ты так говоришь, как будто это каждый день происходит. Так я об этом и говорю. Я не понимаю, что мелкобуквенный несет вообще.
Бывает только одна проблема - когда проприетарная библиотека откомпилирована под древнюю версию компилятора, а автора давно не существует. Но я такое встречал только во времена C++ Builder 6.
>>610858 >>610858 Да я в принципе ньюфаг в плане вот этих сборок библиотек, написания мейкфайлов/cmakelist'ов, интересно подтянуть свои знания в этой области.
простой вопрос: как пробросить класс через dll? как пробросить исключения через dll? что делать с шаблонными функциями и перегружеными в dll? просто подумайте, почему это нельзя сейчас делать общеизвестным методом (считай чтобы был стандарт на это) и почему это хуево в конце концов все упирается в то что нельзя на крестах сделать полноценную плагинную систему на чистых сях - можно, на любой из объектных систем, запиленых на си-интерфейсах (com, gtk) - можно а на крестах - нельзя
>>610875 Пункт 1 в FAQ: >в крестах ты никогда не платишь за то, чего не используешь Допустим, меня не ебут никакие dll, я просто хочу слинковать статически свою охуенно быструю софтину. Почему я должен получать замедление из-за того, что какой-то хуй захотел ПЛАГИН?
>>610875 >простой вопрос: как пробросить класс через dll? А как ты класс из соседнего .o файла берешь? Пиздец, что за тупой вопрос, #include <class_header.hpp>, и все.
>>610885 Объясни мне, каким образом я пользуюсь C++-интерфейсом OpenCV при условии, что он лежит в библиотеке? Может потому что это ты пробил дно своей тупизной?
>>610889 Ты компилируешь ее вместе со своей программой, одним и тем же компилятором. Ну не тупи, анон, например, gcc делает у членов класса выравнивание условно, а clang - нет. Ты передал указатель и при попытке обратиться к члену получишь гроб кладбище.
>>610893 Сам не тупи. Я тут >>610815 написал все, что об этом думаю. Сейчас 2015 год, CMake скомпилирует тебе что угодно под что угодно в автоматическом режиме, но нет, не хочу CMake, хочу extern "C" и __AddRef с __Release.
>>607053 (OP) помогите пожалуйста с кодом http://pastebin.com/9D7MwptS есть форма, где два элемента TextBox и один Button, мне нужно чтобы когда я вводу в TextBox1 массив чисел, после нажатия на Button в TextBox2 мне выводился преобразованный массив, в котором сначала идут элементы, которые больше или равны нулю, а затем отрицательные элементы, но мне на элемент TextBox2 выводится что-то странное, подскажите пожалуйста, как исправить
Если же речь о том, что хочется написать ПЛАГИН, который компилируется любым компилятором, то здесь C ABI нужно не потому что у С++ ABI нет, а потому что плагин, внезапно, можно и на любом другом языке писать, который вообще может даже классов не иметь, а быть с ADT и тайпклассами. C ABI в этом плане наименьший общий знаменатель, который поддерживают все нативные языки. Нужно большее - смотри в сторону JVM и .NET. Если же нужен только чистый C++, то проблемы использовать один компилятор нет.
>>610889 ты линкуешься с ним статически потому что в одном екзешнике можешь хоть на ушах стоять, крути что хочешь разговор за то что кресты в крестах нет стандарта abi, а значит нет динамической подгрузки кода, а значит не сделать полноценную плагинную систему, например
>>610951 >полноценную плагинную систему, например Полноценная плагинная система поддерживает любой язык, и было бы странно, если бы clang и GHC имели бы что-то общее, помимо соглашений о вызовах функций (и обычно это не cdecl). А для внутренних дел достаточно использовать один компилятор.
>>610740 Ну и позорище >как ты это говно пробросишь через границу dll? На текущем проекте ~300 dll файлов с с++ abi, ексепшонами, шаблонами, и динамической загрузкой отдельных модулей. Давай расскажи мне что оно не работает. >на си были запилены охуенные объектные системы >com в винде Ясно-понятно, СОМ как предел местаний. Пару лет по работе использовал что-то похожее, говно-говном.
>>610857 >Там емнип есть анальные ограничения, не? Что он должен быть POD или типа того. Да, кое-какие ограничения действительно есть. Наш эксперт внезапно обнаружил что есть способ прокинуть c++ abi между dll. День прошел не зря, не так ли?
>>610875 >>610951 Я хочу напомнить то в с++ можно линковатся с динамическим рантаймом. В этом случае stl будет в отдельной либе. такие дела. Хуле вы такие тупые, не стыдно?
>>611144 >~300 dll файлов с с++ abi, ексепшонами, шаблонами, и динамической загрузкой отдельных модулей и все это у вас компилится одной версией компилятора, под одну платформу конечно, блядь у вас все работает, но речь то в треде совсем не об этом
>>611207 >и все это у вас компилится одной версией компилятора, под одну платформу А зачем использовать разные компиляторы, скажи мне? Какая-то надуманная проблема. Большинство либ идет в комплекте с Cmake, сгенерить make-файлы под нужный компиль не проблема. >конечно, блядь у вас все работает, но речь то в треде совсем не об этом То-то для половины треда это настоящее откровение.
>>611144 > Ясно-понятно, СОМ как предел местаний. Пару лет по работе использовал что-то похожее, говно-говном. COM на Винде / Gtk в Линуксе / NSObject на Маке - отличная архитектура для системы, лишенной сборщика мусора. Единственное говнокодство в COM это использование GUID'ов вместо строковых имен.
>>611224 Вот что интересно. В винде и маке COM и NSObject вшиты в систему. Ты пишешь код и точно знаешь, что он запустится у конечного пользователя. А в линуксе либы gtk в системе присутствуют не обязательно. Более того, есть долбоёбы, которые принципиально не хотят ставить gtk, потому что любят кеды. Как итог, под линукс вообще нет смысла писать - зачем, если не на каждой копии этой говносистемы запустится твой код?
>>610902 ToString() для массива выводит просто название типа. Тебе нужно или переопределить ToString() (тоесть свой класс создать) или выводить по числу, например сначала все в строку скинуть а потом уже на лейбл хуячить.
>>611237 У твоего опенсорсного кода gtk будет записан в dependencies твоего пакета. Кто-то арчешкольник, которого ебет наличие gtk-либ на kde-шной системе - кто-то не поставит твой софт.А проприетарный код будет таскать все зависимости с собой, как на той же винде. У меня, например, есть матлаб под линукс, так это йоба-папка размером с гигабайт, в которой даже своя древняя java с собой положена.
>>611207 >и все это у вас компилится одной версией компилятора, под одну платформу Да, и еще и устанавливается в одну строчку, типа sudo apt-get install libopencv-dev. А ты думал. Собственно, я знаю, что ты думал. "самые охуенные проекты (и соответственно, чуваки которые их делали охуенны) - юзали, положим борландовский билдер, дак они писали собственные пакеты и компоненты, так же как и стандартные пакеты в билдере, а все сторонние библиотеки, что нужно было подключать + все winapi заворачивали в это, получался код единого стиля". 2015 год, билдер, winapi, компоненты.
Знаю, что вопрос не для этого треда, но спрошу тут. С чего вы начинаете писать программы? Я пока только учусь и решил для опыта написать аудиоплеер, но теперь сижу и не знаю с какой стороны за это взяться. Нахуярить гуй в Qt дизайнере или сначала понаписать классов для всяких плейлистов, или это все вообще не то и начинать лучше с другого?
>>611526 Сначала пишешь libyoba и тестовое консольное приложение к нему. Потом допиливаешь консольное приложение. Потом добавляешь гуй. Вот так - >>611532 не делай ни в коем случае, так только дауны делают с циклом "исправил ошибку, нажал скомпилироваться, запустил и произвел 10 шаманских кликов мышкой, чтобы все протестировать". А цикл компиляция-отладка-тест должен быть по-максимуму автоматизирован. И только с уже отлаженным ядром можно думать о гуе.
>>607053 (OP) Коданы, что православней указатели или ссылки? Сам ссылками редко пользуюсь, только при передаче параметров в функции и при перегрузке операторов = и ++. Смартпоинтеры не интересуют пока.
>>611884 Это ОЧЕНЬ сильный срач, вообще, скорее, вопрос стиля и как принято писать в определенном проекте. Ссылки - это просто синтаксический сахар над указателями.
>>611917 1) Бери профайлер. Время выполнения через clock не будет точным т.к. измеряет не время выполнения, но разницу во времени, которая может меняться по разным причинам (например, ОС будет чуть больше отдавать времени другим процессам и т.п.) 2) http://www.cplusplus.com/reference/chrono/
>>611916 >вопрос стиля Не всегда же. В прошлом или позапрошлом треде уже срались, и я пояснял, как использование ссылок улучшает безопасность передачи аргументов, но ухудшает понимание того, что они мутабельны.
>>611237 фигня ну хочешь что поставить емакс на kde-based de, ну притащить он с собой несколько gtk зависимостей, ну и че? всегда это можно будет удалить, если надо с помощью системы управления пакетами..
>А зачем использовать разные компиляторы а как по твоему разпространяются бинарные пакеты с закрытыми патентами алгоритмами? это просто dll или so из которой торчит сишный интерфейс или com-библиотека, из которой торчит объектный интерфейс и никого не ебет какой версией компилятора и вообще каким компилятором она сделана, и подключить ее можно к проекту на любом помпиляторе, и даже более того, подключить вообще к любому языку, поддерживающему ffi блядь, это ебанутый тред я пишу очевидные вещи, просто очевидные, это как то что хлеб - еда, а кисель - напиток при этом меня кроют хуями
>>612254 Тебе и было сказано, что в разработке такие "универсальные дллки" это довольно редкий случай, обычно ты ну максимум манкипатчишь собственные старые в уже развернутом приложении. А полноценный проброс классов нужен и того реже, поэтому решено было этим пожертвовать в угоду скорости.
>закрытыми патентами алгоритмами А это вообще пушка, с учетом того, что в каждом опубликованном патенте всегда есть полное описание алгоритма.
Привет, двощи. Стоит задача - необходимо проиндексировать файлы подходящие под определенную маску аля "*.dat". Т.е. я хочу получить массив/список эдаких ссылок на файлы, по которым я могу получить файл для чтения/изменения. Как это сделать быстрее всего ? В винапи есть файловые дескрипторы, это оно ?
>>612364 >>612365 Ну, я давно изучал пхп (цсс, хтмл, немного явы, на уровне встройки его в пхп код), мог даже что-то неплохое написать. Но сейчас я уже его почти не помню. А с чего тогда лучше начать? У вас, просто, в шапке и указан Страуструп для начинающих. Тем более это самая свежая книга.
>>612429 Я с Шилдта начинал. Свежесть не так и важна, если только начинаешь программировать. Вон те же сишники, все еще K&R читают, а ей сколько лет уже! Тебе главное понять принципы, что да как работает. А потом, как наберешься опыта и будешь без проблем (и гугла) решать простые задачи, переходи на Страуструпа, или уже на черновик стандарта.
>>612462 Язык программирования - это лишь два слова, которые ничего не значат сами по себе. Значение им придает стандарт, в котором описываться что это значит и как это должно работать. Стандарты принимаются специальными комитетами, которые отвечают за дальнейшее развитие языка. А по этому стандарту пишут компиляторы, которые являются реализациями какого-либо языка. Есть множество различных компиляторов, каждый из которых в чем-то отличается от другого. Ведь каждый может интерпретировать написанное по разному. Но тебе со стандартами С++ стоит ознакомится только тогда, когда ты уже будешь более-менее технически образован, чтобы понять что там написано. Ну и нормальное знание английского, так как ты вряд ли найдешь перевод.
>>612468 А вот кстати что потом то читать? Ну вот прочитал я книгу для нубов, научился выводить хелоу ворлд в консольку, а дальше куда? Что читать, что писать? Я думал Саттер с его задачами подойдет, но оказалось там пока для меня пиздец. Теперь сижу и не знаю за что хвататься и куда смотреть.
>>612462 с++ слишком огромный чтобы его изучить весь. Что тебя привлекает, гейдев? Выбери интересную задачу, может просто посмотри на всяких апворках, даже неберясь за нее просто попробуй сам сделать. Почитай как такие задачи решают профессионалы. Параллельно читай основные приемы, как писать классы, какие библиотеки для твоей задачи уже написаны, как ими пользоваться. А то ты так будешь вкатываться лет 5 лол. И на тот момент уже все что ты прочитал устарело. А текущему работодателю нахуй твой набор библиотек не нужен.
>>612489 Он несравнимо меньше, чем какая-нибудь модная параша с сотнями фреймворков. Без проблем можно изучить процентов на 70 и иметь неплохое представление об оставшихся 30.
>>612489 А что изучать в голых плюсах без, простигосподи, STL? Сам язык легко осваивается за неделю-другую. Потом начинаешь изучать библиотеки (разумеется, в рамках каких-то задач). А потом, много позже, приходит понимание.
Если вопрос в том, что точно изучать, отвечаю - базовый синтаксис, STL. Понять что такое boost. Дальше - по желанию.
>>612585 Ну, возможно, что у меня ошибка выжившего, но мне на фоне сотен говнотехнологий, которые непременно требуются на тех же жабовакансиях, stl с бустом показались на порядок однороднее и проще в освоении.
>>612570 >базовый синтаксис, STL В принципе согласен с тобой. Но ведь есть задачи, где stl вообще не нужен? Может ему понравится делать на Qt игры для андроида. Знать нужно, но там порог вхождения настолько низкий, что можно начинать прямо сейчас, без смс, а все остальное изучать в процессе работы.
Чики, двощ. Есть какие-либо стандарты, а лучше книги по С и С++ в которых описано как работают эти языки "изнутри". То есть, допустим, вызывается функция f(T b) {...}, как создается локальная переменная, как определяется тип и тому подобное. Или достаточно почитать что-нибудь общее наподобие драконбук или это компилятора зависит. Раньше вообще не задумывался об этом когда писал лабы на си, а когда столкнулся с С++ с его перегрузками, конструкторами, то стало интересно.
>>612713 >как работают эти языки "изнутри" Assembler. Disassembler. Debugger. Лучше самому один раз попробовать, чем сто раз об этом прочитать. Возьми откомпилируй функцию с ссылкой в качестве аргумента и попробуй дизассемблируй полученный файл. Или там в дебаггере по шагам смотри что там куда происходит. Потом с указателем. С классом. Структурой. Я так по всем типам прошелся в свое время.
>>612713 У меня сейчас есть: Andrew Appel — «Modern Compiler Implemenation in C» Richard Bornat — «Understanding and Writing Compilers» Terence Parr — «Language Implementation Patterns» Нарыл в Гугле. И кратко о синтаксических деревьях: http://www.defmacro.org/ramblings/lisp.html
Поясните, боги программирования, как смочь в дизассемблирование? Я уже много кого порядокм заебал, но я делаю мод для одной старой игры на ps1.
Так или иначе, я далеко продвинулся, влез очень глубоко, разобрался во всей структуре диска и внутренних файлах, а также полностью освоил внутренний скриптинг локаций и битв.
Проблема в том, что многие вещи приходится реализовывать через жопу вместо аккуратных правок исходников.
Я слишком слаб в той сфере, до которой пытаюсь докопаться. Вот, допустим, мне нужно поменять определенную зависимость в расчётах, которая возникает при считывании определенного байта. Я ставлю брейкпоинт на чтение этого байта из памяти, а что дальше? Ну, я вижу ассемблерный код, я понимаю каждую строчку по отдельности, но в общем и целом нихуя не понимаю, что же он делает. Какая-нибудь небольшая функция может состоять из тысяч операций.
У меня ощущение, что люди с опытом мгновенно видят различные паттерны и шаблоны, когда смотрят на ассемблерный код, но я читаю его строчку за строчкой, так что общую картину не вижу. Ну считалась переменную, на произвелось три тысячи операций над регистрами, ну и что? Как мне понять, что нужная мне функция закончилась и дальше идет уже совершенно другой расчёт? Может, я уже читаю код рендера, а не логики, но не знаю об этом.
>>612921 >Обрабатываешь миллиарды элементов в секунду? Да, поэтому стек должен быть постоянного размера. Известно максимальное количество элементов, которые могут храниться в стеке.
>>608878 Пиздец, какие же здесь сидят аутисты, я просто поражаюсь. Один становится топ 3 директх программистом в России, прочитав книжку. Другой получает задачу, которую решит 8 классник на собеседовании(!!), так он ещё и пишет какой-то шизофренический код с рандомными отступами, на который без слёз посмотреть нельзя. >убрать пробелы из КОНЦА На строке "ss ss" твоё говно как отработает?
>>613064 Скорее >Есть ли области работы с молотком, где не требуется езда на одноколёсном велосипеде, с одновременным жонглированием десятью урановыми молотками?
>>613225 В ответ на нормальный рекурсивный алгоритм, подгоревшая байтомартышка высрала нечитабельное говно на ворохе костылей, ещё и в одну строку запихала, ну лол же. str.take(str.lastIndexWhere(_ != ' ') + 1) А сейчас тебя вообще порвёт: str.trim
>>613243 Пришел тралить, а что написано не понимаешь. Причем тут массив? Нужно убрать пробелы в конце строки, не зная ее длину, а зная только указатель на начало.
>>613268 >Функция должна быть написана в расчёте на работу с очень длинными строками с очень большим количеством пробелов, оптимизирована по количеству обращений к памяти >рекурсивный алгоритм Давай, расскажи, что у тебя стек больше, чем срака твоей мамаши. Кококок хваставая рикурсия конпелятор разбирется.
>>613259 Вообще-то явное использование рекурсии (вместо комбинаторов) - это дно функционального программирования. Впрочем, что еще ожидать от школьника, выучившего скалу и решившего впечатлить мир этим знанием.
>>612837 А если поковыряться с llvm и clang? А то ассемблер/дизассемлер меня не очень радует. В дебаггере же просто адреса памяти и что они хранят, но тут я возможно чего-то не знаю.
>>613533 Цикл for (initialization; loh; ++pidr) состоит из трёх частей, разделяемых между собой двумя ;
Любая из трёх частей может быть опущена (в т.ч. любые две из трёх или все три), но обе ; должны обязательно наличествовать, чтобы компилятор понял, что к чему относится.
>>613561 А, ну да, ты же обнуляешь каждый раз, когда не пробел, я не заметил. Пардон.
Но все равно твой вариант нихуя не оптимален. Получается сложность O(длина строки), а можно сделать O(количество пробелов в конце). Вот исправленный высер, например: http://ideone.com/DpE8tK
Результат или ошибкаАноним28/12/15 Пнд 04:55:45#358№613984
Господа, как максимально годно, красиво, просто и круто в духе Design Patterns решить задачу возвращения в качестве результата работы метода некоторого нечта - либо того результата того типа, который ожидается, либо объекта класса Ошибка? Исключения, передача дополнительной переменной и прочие ужасные решения подобного рода не интересуют. Хочу максимально инкапсулированно и прозрачно для внешнего кода.
Есть тут знатоки SFML? Вопрос такой: допустим у меня есть 2 слоя с изображениями и один из них я хочу ресайзить так, чтобы второй оставался нетронутым. При этом также желательно, чтобы координаты мыши из них тащились в соответствии с масштабом. window.view.zoom для этой задачи не подходит, т.к. он ресайзит всё, что находится на экране. RenderTextureы, в которых хранятся эти самые слои, не хотят поддаваться zoom - просто ничего не происходит. Есть ли решение?
>>613993 Да, это я видел. И либо я спать хочу, либо просто туплю, но не понимаю, как мне потом координаты к единой системе приводить. Каждый раз по клику переключать view затратно. Вообще, изначально я думал, что всё, что можно применять к RenderWindow, можно и к RenderTexture. Т.е. я взял бы, перемасштабировал текстуру, вывел бы её на экран и при необходимости встроенным методом pix_to_coords, или как там, получал бы какие мне нужно координаты. Но view, фактически, просто на время изменяет масштаб моего окна, а на текстуре это никак не отображается, так что не зная, масштабированная ли в области клика текстура или нет, я ничего толком сделать не могу. Надеюсь, суть я донёс, а то уже сам забыл, что хотел написать. Надо спать идти.
>>613984 Например, можно возвращать пару или кортеж, где первый элемент технический - ошибка. Потом, их можно будет легко разделить с помощью std::tie. Так или иначе ты должен определить один тип возвращаемого объекта, который инкапсулирует и ошибку и возвращаемые данные. Так будет type-safe.
И кстати, >годно, красиво, просто и круто противоречит >в духе Design Patterns
>>613996 Это так и делается, на самом деле. Ничего затратного в этом нет, обычные афинные преобразования, на производительность едва ли влияют, хоть 100 слоев двигай. Как хочешь, в общем.
>>614183 Пока не придумал другого решения, буду пользоваться этим. Хотя может и правда, так и нужно делать.
>>614184 Ну взять ту же самую миникарту. Допустим у нас есть 2 RenderTexture, в которых лежит полноразмерный оригинал карты. Одну мы просто выводим на экран, а вторую зумим через view.zoom и тоже выводим, где-нибудь в углу. Теперь, по щелчку пытаемся определить координаты внутри каждой RenderTexture с учётом зума. Для этого нам нужно просто вызвать внутренние методы pix_to_cords, ну или что-то вроде того.
Но это всё в теории.
На практике, судя по всему, придётся делать по другому, потому что RenderTexture не умеее в view. Берём нашу текстуру карты, меняем view окна, рисуем миникарту, меняем view обратно, рисуем полноразмерную карту. Теперь, для определения координат внутри миникарьы получаем координаты клика, снова меняем view на миникарту, приводим коорлинаты методом и меняем view обратно.
>>614158 Вот этого двачую, без исключений самое лучшее, что можно сделать. >>614152 Неплохой блог, и не мертвый. Добавлю в следующем тренде, будет шапка с тяночками. Надеюсь, что эта Катя не пишет void main, а то нашему коллеге опять порвет, лол.
>>607053 (OP) Привет, программач. Дело в том, что мне нужно сделать класс матрицы. Понятное дело, я делаю его через шаблоны, потому что матрицы могут быть 2x2, 3x3, 4x4, 5x2, 1x4 и так далее. Использовать я буду в основном матрицы 4х4. Для них нужно написать повороты, перемещения и другие функции, работающие только для матриц 4x4. Выделять для них целый класс - слишком жирно, я считаю. Как мне указать в шаблонах, что какая-то функция должна собираться, только если выполняется условие, что размер матрицы равен 4x4? То есть такой код не скомпилируется: Matrix<5, 2, float> mat; mat.translate(Vector<3, float>(1, 2, 3));
А такой скомпилируется: Matrix<4, 4, float> mat; mat.translate(Vector<3, float>(1, 2, 3));
>>614253 Если ты делаешь шаблонные матрицы, что тебе мешает сделать шаблонные функции поворота и перемещения? А для твоего говноедского решения есть static_assert.
>>614258 Поворот и перемещение нельзя сделать для матриц, отличных от 4x4. Почему решение говноедское? static_assert - это рантайм. Мне бы хотелось во время компиляции указать на все ошибки.
>>614261 >static_assert - это рантайм Нет. assert это рантайм, static как раз указывает на compile-time. >Поворот и перемещение нельзя сделать для матриц, отличных от 4x4 Я, возможно, не совсем понимаю, что ты имеешь в виду под поворотом. Транспонирование матрицы? Поворот вектора оператором, определенным матрицей? В обоих случаях привязки к размеру нет. Запили на псевдокоде, что ты имеешь в виду.
>>614511 Ну так транспонирование определено для любых матриц, а не только для квадратных. Тебе надо сделать метод, который не меняет саму матрицу, а возвращает новую, вообще говоря, другой размерности. Это будет правильное и однородное решение, в отличие от.
[code lang="cpp"] template <typename T, size_t W, size_t H> class Matrix { //... T data_ [WH]; //... public:
>>614511 > вместо того, чтобы создавать 74654689 классов Классы у тебя создатутся в любом случае (просто по шаблону). То что ты хочешь сделать не совсем моответсвует идеологии, шаблоны изначально предназначаються для того чтобы использовать один и тот же код для разных типов (хотя они уже далеко ушли от этого). Если тебе нужно разное поведение (один тип может что-то делать, другой нет) то идеологически правильно использовать наследование (ну или агрегацию и т.д.). Например, от общего класса матрицы наследуешь квадратную матрицу, которой для надежности даешь конструктор который принимает один аргумент (размерность) и там внутри вызывает конструктор базового с двумя одинаковыми аргументами. Потом переопределяешь или добавляешь нужные методы. Пытаясь на шаблонах придать разное поведение ты не выигрываешь в количестве кода - тебе все равно нужно прописать все отличное поведение. Реальный выигрышь нулевой, только больше пердолинга и высраных кирпичей при ошибках компилятора. Но сделать на шаблонах конечно можно, например https://ideone.com/6J6hwE - компилируется с закоментированой 26 строкой, если ее раскоментировать будет ошибка компиляции. Если интересует такой пердолинг читай книгу Александреску. Кстати в 17 стандарте вроде хотят расширить функционал шаблонов в подобном направлении.
>>614511 >>Использовать я буду в основном матрицы 4х4. >Слишком жирно выделять целый класс для 4x4. схуябы? учитывая фиксированные размеры можно хуячить оптимизации уровня mmx/sse/sse2 а то и выше
>Чтобы можно было сделать матрицу из многочленов, например. тебе это нужно вообще в данной задаче?
>как сделать, чтобы метод setToIdentity не работал для неквадратных матриц? std::enable_if
>>614612 Не согласен, ибо замедления это не дает, а структуру может улучшить. Вот виртуальность да, часто бывает вредна из-за оверхеда, но и в математических либах ее можно воткнуть в некритичные места без особого замедления.
Concurrency in C++11 Хочу навернуть во время праздников в тишине и спокойствии. Кто читал? Годно ли, стоит того? Не, я все равно прочитаю, но что ли подзадорьте
Как лучше, так >>614158 или так >>614081 Я понимаю, что обе реализации будут работать, мне интересно, как лучше. Исключения - это здорово,безусловно, только это непрозрачно для внешнего кода.
>>614681 Yep. Спасибо. Пока ещё слабо представляю, как мне эти навыки пригодятся, учитывая что конторы пишут на шинапи с 98 стандартом и пока переходить не думают.
Пасаны, пасаны, выручайте. Так уж случилось, что я выбрал призванием строить ракеты. Есть у нас в курсе такой распрекрасный предмет - "Численные методы". Ситуация идиотская - нужно написать расчетку по этому предмету, что собстно не сложно (ага, я так думал) на любом языке программирования (препод так говорил). Самое интересное в том, что я, претендуя на автомат, припер преподу расчетку в паскале (язык учил, знаю хорошо, решил не изобретать велосипед), что не понравилось святейшему. Потом я припер ему расчетку на питоне (учу сейчас), что ему тоже не понравилось, так как он на нем не работал. Эта хитрая жопа сказала что автомат мой, если в срок до 12 00 31 декабря я перепишу РР на C++. Кресты учил в 11 классе, по книге, которая что то там про 21 день. Естессно уже нихрена не помню, а вспоминать особо времени нет. Так вот что я хотел от вас спросить: где можно найти более менее краткое изложение математических возможностей ++ с примерами и объяснением?
Как вкатиться в железники? Хочу программировать низкоуровневые вещи и разбираться в железе, как тот бородач с очками из Silicon Valley. Недавно закончил читать Липпмана "Язык Программирования C++". Не понимаю куда двигаться дальше.
http://ideone.com/Kd8bEy Карочи, эта программа нужна для того, чтобы подсчитывать единички в двоичном представлении числа. Как сделать так, чтобы они подсчитывались только с 5 по 10 бит включительно?
>>614815 Нужно сделать побитовое and с двоичным числом типа 00001111100000. Только двоичные числа не поддерживаются, поэтому переведи его в шестандцатиричное и напиши n &= n 0xвотэтовотчисло, перед циклом.
>>614840 А почему не 00001111110000? Пятый бит же тоже включительно. А так вообще спасибки. Долго ебался, пытаясь сделать and с этим числом в двоичном и десятичном виде, и ещё удивлялся своему фейлу. Теперь всё работает.
>>614848 Зависит от того, как ты считаешь биты - первый бит у тебя первый, или все-таки нулевой. Поэтому я даже не пытался считать нолики и единички у себя - это твое дело.
>>614541 Нет, я всё-таки перепутал. Не транспонирование, а поворот. Ну как на том сайте написано жи! Транспонирование у меня определено для всех матриц.
>>614626 1 - Если бы я использовал только матрицы 4x4, то я бы сделал класс для матриц 4x4, но я буду использовать не только их. Я их буду использовать просто чаще других. Алсо, оптимизация без надобности - это не совсем правильно.
2 - Да, я студент-математик. Мне нужно составлять матрицы из комплексных элементов и многочленов.
3 - Вот за это спасибо. Теперь надо выбрать между static_assert и enable_if. Помню, треда 3-4 назад здесь собрались ёбнутые фанатики со своим SFINAE. Это же как-то относится к моей проблеме? Как к ним примкнуть?
>>614580 С наследованием интересно. Но всё же хотелось бы без него. Насколько корректно решать эту задачу с помощью std::enable_if или что-то в этом роде?
Почаны, подсобите с потоками разобраться, а то хочу в тренде быть. http://pastebin.com/zAtUdU1p Есть поток для ввода чисел, которые складываются в многопоточную очередь, откуда берутся и выводятся потоками из пула. После выполнения что-то не ладится с синхронизацией или типа того.
terminate called after throwing an instance of 'std::bad_function_call' what(): bad_function_call zsh: abort (core dumped) ./test
>>614258 >>614265 >>614268 >>614280 Вы все - ебланы, которым в профессии не место. Ему нужно было посоветовать ключевое слово requires и концепты. Пиздец, с кем я сижу на одной борде.
>>615016 Ну толсто же. Во-первых, я ему подсказал, как правильнее решить проблему без проверок вообще, а не какой из способов применить для костыльного решения. Во-вторых, концепты это кусок семнадцатого стандарта, их еще нет официально, и применять их в продакшене сейчас - дурной тон. В третьих, его задача гораздо проще и короче решается одним static_assert (4 == H && 4 == W), концепты ввели для более сложных случаев типа сравнения сигнатур, и писать там потребуется побольше.
>>614939 enable_if напрямую не решит твою проблему, это чисто утилита для SFINAE. Для static_assert тебе просто придется написать условие, как вот здесь: >>615031 , если оно не выполнится, то компиляция прервется. В enable_if от условия зависит только наличие typedef'а внутри структуры, т.е. тебе придется городить хуйню из наследования и тому подобного.
Поворот делается почти так же, как в коде для транспонирования, тебе просто, в зависимости от угла поворота, нужно пустить один или оба индекса в обратном направлении. Нарисуй эту хуйню и сразу разберешься, тыжматематик.
>>615039 Если класс небольшой и используется только главным классом из того же файла, то нормально. Например, какой-нибудь класс ячейки контейнера в файле с классом контейнера.
>>614698 Первое, очевидно. Во втором случае будет всегда передаваться лишняя инфа, ибо тебе нужна либо ошибка, либо значение - что-то одно. variant же как раз умеет не хранить лишней хуйни.
>>615041 А если я хочу, чтобы этой функции вообще не было? То есть для матрицы 4x4 она есть, а для матрицы 4x3 уже нет. Она просто отрезается из кода. Это же SFINAE?
Насчёт поворотов - какие индексы? Ты знаешь, что такое матрица поворота? Это не просто взять и повернуть элементы матрицы. Это совсем другое.
Если там нет блокировки для всех методов а так оно и есть, прозреваю, тут io_mutex определен, но не используется, то ты сосешь с синхронизацией.
Алсо, код какой-то пиздецовый, пул вообще не используется, числа выводятся основным потоком. Лучше прекрати блуждать в потемках и наверни Уильямса, как анон выше сделал.
>>615050 Нет, ее и так не будет, без SFINAE это вообще другая совсем тема. Твой класс шаблонный, следовательно, пока ты не обратился к функции, она не сгенерируется. А когда обратишься, она попытается сгенерироваться, и сработает static_assert.
Я знаю, что такое матрица поворота это было моим вторым предположением >>614263 здесь. Но тогда я не понимаю, какое действие ты хочешь совершить с самой матрицей-то? Просто умножить на вектор и вернуть новый вектор, не изменяя матрицу? Тогда это определено для всех квадратных матриц, а не только для 4x4. Я бы на твоем месте выделил класс SquareMatrix, унаследованный от Matrix, и все операции, определенные только на квадратных матрицах, вынес в него. А остальные - оставил в Matrix. Это вполне логичное разделение, ибо свойства квадратных матриц довольно сильно отличаются от общих есть определитель, можно сделать проверку на унитарность, ну ты понел. Так ты сможешь, читая код, сразу увидеть, что в данном месте требуется именно квадратная матрица, а не разбираться с ошибками компиляции, когда сунешь не то.
>>615053 Не очень хорошо, ты получишь десять страниц ошибок, когда оно не скомпилируется. А в static_assert можно самому задать строку, которая выведется при ошибке.
>>615059 А если мне вдруг понадобятся какие-то свойства матриц с соотношением сторон 9:14, то мне и для них новый класс создавать? Нет, хочу всё в 1 сделать. SFINAE жи есть, почему бы не использовать его?
>>615061 Каких 10 страниц? Там будет около 20 строчек, и в 1 из них будет искомая ошибка. Если ты работаешь через IDE, то вообще без проблем её сдетектить.
>>615063 Да используй что хочешь, няша, хоть макросы. Ему показывают good practices, а он нос воротит, лол. Я тебе пояснил за преимущества static_assert, дальше выбор за тобой.
Классы на каждый чих создавать глупо, но в конкретном случае слишком много уникальных для квадратных матриц свойств, так что они вполне заслуживают отдельного класса. И так будет легче писать и читать код, он быстрее скомпилируется, хуле тебе еще надо-то?
>>615064 >двач, как чистить сортир вилкой? слышал, пару тредов назад тут были адепты вилок, это как-то относится к моей проблеме? как к ним примкнуть? >на тебе щетку, щеткой чистить заебись. чисти говно! >неееет, я хочу вилкой, поясните за вилку! >вилкой чистить неудобно, каждое движение зацепляет мало говна, будешь чистить долго >да какое там долго, будет около 20 часов всего! если начальник даст большую вилку, то вообще без проблем все почистить
>>615056 Какой смысл делать это методом, если результат не зависит от самой матрицы, только от размерности. Сделай глобальную функцию, которой передаешь размер, и она создает единичную.
>>615072 Охуительные советы итт. Ты же понимаешь, что генерировать единичную матрицу и копировать её в нужную - это медленнее, чем сразу делать нужную матрицу единичной?
>>607053 (OP) Аноны, шапка, конечно намекает Но можно ли джуну найти вакансии на крестах или лучше идти в другой сиподобный язык и только потом возвращаться на кресты?
>>615090 >Я сказал, почему медленнее. Нет, не сказал, только кукарекаешь из лужи мочи. Вот когда предоставишь доказательства, что это работает как минимум в 2 раза медленее, тогда и кукарекай.
>>615091 >Вот когда предоставишь доказательства, что это работает как минимум в 2 раза медленее Тепеь "медленнее" начинается только с "в 2 раза медленнее"?
>>615078 У меня такое впечатление, что я разговариваю с зеленью, обожающей сказку про белого бычка. >>615061 - сообщения об ошибке больше и менее читаемые >>615053 - нужно написать в 2-3 раза больше кода
>>615080 >>615090 Пикрелейтед. Вот этот >>615086 анон абсолютно прав, в эпоху move semantics просто стыдно что-то бормотать про медленность перемещений.
>>615097 Стыдно - это пошёл ты нахуй. Перемещения медленные. Пока не докажешь обратное - ты пидор и я ебу тебя в жопу.
(Автор этого поста был предупрежден.)
>>615106 Тогда преимущество достигается только для стековых объектов, а их перемещать нехуй. Не могу себе представить ситуацию, в которой быстрее превратить матрицу в единичную, чем удалить старую с тривиальным-то деструктором и создать единичную уже новую.
>>615054 Там как раз есть блокировка для всех методов, это мьютекс на вывод в консольку. И почему пул не используется? > pool.doJob (std::bind (calculate, el));
>>615110 Да, я не заметил просто. Энивей, как-то странно у тебя все построено, у тебя, по сути, главный поток является диспетчером для всего, и это будет узким местом для больших данных. Обычно делают метод, который дергает очередь, создают пул потоков, которые все инициализированы сразу этим методом с параметром-очередью, а они уже независимо дергают очередь и смотрят, есть ли там что-то. Короче говоря, примерно как у тебя для чтения сделать и для вывода.
Правда ли, что в Qt и Boost похожие API для мультитрединга? Разобрашись с этим в STL, я по идее смогу работать комфортно и с первым, и со вторым? иногда ссылаясь в референс конечно
>>615242 Я не особо обмазывался этой хуйней, но мне кажется, что это актуально только для узкоспециализированной хуйни вроде электросхем и тех же квантовых вычислений. С нормальной пекарней ты всегда получишь замедление, ибо много лишнего будет пересчитываться при каждом изменении.
>>615357 В boost треды практически идентичны стандартным. QThread же сильно отличается от них по интерфейсу (бустовые и стандартные минималистичны, а он набит овер 20 методами), плюс сильно заточен под реалии куте (сигналы и слоты). Я бы не использовал QThread вне приложений, которые уже насквозь пропитаны Qt. Такие дела.
>>612857 У Касперски есть неплохая книжка, старенькая довольно, но основы разжеваны годно. Гугли "Касперски, Рокко - Искусство дизассемблирования". Если вообще не шаришь в ассемблере, наверни какого-нибудь Юрова перед ней.
>>615637 >Если вообще не шаришь в ассемблере Что подразумевается под этим? Я без референса понимаю каждую инструкцию, привык к branch delay slot'ам, но мои глаза не видят паттернов на лету. Из-за этого я очень медленно читаю код.
>>615716 А ты уверен, что этот адрес там безусловно? Возможно, при другой истории выполнения там будет он. Ну или просто это мусор, оставшийся после изменения кода. Маловероятно, что туда идет переход откуда-то еще, хотя чем черт не шутит.
>>615718 >Маловероятно, что туда идет переход откуда-то еще Как мне это определить? Выгружал код в ida, она автоматом никаких xref для этого участка не выдала, но я и не весь файл дизасмил.
Суть в том, что мне надо отследить этапа расчёта переменной. Но в процессе расчёта она хранится в разных местах на разных этапах. Вот я и пытаюсь понять, как я пришел в этот кусок кода.
>>615728 Брейкпоинт на что? Вот смотри. Я поставил брейкпоинт на запись значения по заданному адресу. Таким образом я попал в кусок кода, где это значения считывается из другого адреса перед тем как попасть в конечный. Я разобрал этот кусок, а потом поставил брейкпоинт на запись по тому адресу, откуда считалась переменная, чтоб понять, как расчитывалось её значение. Попал в следующий кусок кода, где происходит часть расчёта значения, а потом запись. Я разбирал код построчно, поднимаясь вверх, пока не дошёл до этого jr. Теперь я не знаю, откуда я попал в этот кусок кода.
>>615740 Нет, я снова слепой мудак, это не то, что я искал. Где лучше задавать свои вопросы, касающиеся этого? Сомневаюсь, что с++ тред для этого подходит.
Помогите неофиту. Хотел посмотреть, как работает данная дичь без std::ref то бишь убедиться, что она действительно просто создает локальную копию передаваемого объекта но фишка в том, что это говно вообще не скомпилилось, выдавая доселе невиданные ошибки. ЧЯДНТ?
>>615822 > -std=c++1y Что за компилятор? Похоже что у тебя чего-то нет, вроде ругается на result_of<T>::type а его только в с++14 добавили. Для тредов отдельно подключал библиотеку? Может библиотека для 14 компилятора, а твой компилятор старее.
>>615839 14 же, не суть. В данном случае 11 с головой. >для тредов подключал На пике же видно, -pthread, треды у меня нормально работают, не первая программа. Тут с передачей по ссылке проблемы, если ее убрать - тогда все будет окич Но суть-то в эксперименте, конструктор треда пренебрегает передачей по ссылке и тупо копирует объект. В данном случае нужно использовать raw ptr или std::ref. К сожалению, не удалось мне воспроизвести передачу по ссылке. Впрочем, хуй с ней.
Рабам крестов, что слепо уповая,
Стремятся байтоебствовать всегда:
Здесь жаждут скоростей, не признавая,
Что кто-то может прочитать их код,
И уступить удобству не желают.
О боги! Столь несчастен будет тот,
Кто обречен тестировать ту массу,
Что в ста коленах Бьерна проклянет.
А свыкнувшись, сам станет пидорасом.
TL;DR Читаешь https://goo.gl/kVaela , делаешь примеры и суешь в http://ideone.com , ошибки копипастишь в гугл, непонятное ищешь в предыдущих тредах, спрашиваешь в этом треде, если не нашел. Если тебя послали на хуй или не ответили, то ты спросил платину, читай предыдущие треды внимательнее. И прочитай FAQ, расположенный ниже, в нем много полезного.
Унаследованная памятка:
Вопросу по синтаксису идут на хуй.
Лабы идут на хуй.
"Как мне сделать Х на чистых крестах без библиотек" идут на хуй.
Все идут на хуй.
Хейтер сосет члены на пару со своей мамашей.
Тег [code] работает через жабаскрипт-костыль: https://github.com/ololoepepe/MakabaCode
Старший брат:
Предыдущий:
FAQ:
Q: Почему стоит использовать именно C++?
A: Ни один язык не идеален, но по совокупности киллер-фич C++ оставляет все остальные языки позади. Вот основные три:
+ C++ действительно быстрый - по скорости они вместе с C с большим отрывом уделывают любой другой язык. Замедление относительно C находится в районе 0-20% а в ряде случаев C++ оказывается даже быстрее, причем проявляется только при использовании высокоуровневых конструкций (в крестах ты никогда не платишь за то, чего не используешь).
+ C++ один из наиболее выразительных и мощных языков, позволяющий использовать большинство существующих парадигм. Его философия построена на минимальном ограничении программиста в выборе методов и инструментов простреливания ноги решения задачи.
+ C++ по-настоящему популярен. На нем написаны десятки тысяч приложений и миллиарды строк кода, о нем написаны сотни книг, он до мельчайших подробностей документирован и стандартизован. Используя C++, ты никогда не останешься без работы или поддержки комьюнити.
Q: Но он же давно устарел!
A: Современный C++ весьма далек от языка, которым он был в 1998 году. В настоящее время кресты живее всех живых, их развитие движется семимильными шагами, а новые стандарты принимаются каждые три года, сохраняя при этом полную обратную совместимость с предыдущими. К сожалению, из-за обилия некачественной литературы по крестам, в которой игнорируются новые средства языка, бытует мнение о его "несовременности".
Q: Сейчас все пишут на %languagename, а кресты сосут у него!
A: Нужно понимать, что используемый язык должен соответствовать поставленной задаче. Никому не придет в голову писать на C++ скрипты или веб-фронтенд, но лишь немногие языки могут соперничать с ним по разнообразию решаемых задач.
Q: Окей, я решил вкатиться. Какие же книги мне читать?
A: Специально для тебя аноны /pr собрали уникальную коллекцию отборной литературы по крестам. Только лучшие книги, последние издания, без хуев! Выбирай категорию и обмазывайся:
Для нюфань:
Учебники для начинающих. Все примерно одинаковой годноты, читать имеет смысл только какой-нибудь один, который больше приглянется.
Стэнли Липпман, Жози Лажойе и Барбара Му - Язык программирования C++ (2014) - https://goo.gl/kVaela
Стивен Прата - Язык программирования C++ (2012) - https://goo.gl/z7kA8u
Бьерн Страуструп - Программирование. Принципы и практика использования C++ (2011) - https://goo.gl/nAFUXa
Герберт Шилдт - C++. Базовый курс (2010) - https://goo.gl/qMLAFl
Роберт Лафоре - Объектно-ориентированное программирование в C++ (2004) - https://goo.gl/QvjR6x
Учимся не писать говнокод:
Книги про основные подводные камни для тех, кто осилил предыдущий пункт. Следует пролистать все.
Скотт Мейерс - Эффективное использование C++ (2005) - https://goo.gl/wsDXGz
Скотт Мейерс - Наиболее эффективное использование C++ (1996) - https://goo.gl/tHa0tO
Скотт Мейерс - Эффективный и современный C++ (2015) - https://goo.gl/Im8VYQ
Скотт Мейерс - Эффективное использование STL (2002) - https://goo.gl/QtS8Dc
Герб Саттер и Андрей Александреску - Стандарты программирования на языке C++ (2005) - https://goo.gl/Cpk4YR
Наиболее детальные описания языка:
Бьерн Страуструп - Язык программирования C++ (на ангельском) (2013) - https://goo.gl/XkAiOX
Бьерн Страуструп - Язык программирования C++ (2010) - https://goo.gl/iZBDiV
Стандарт C++14 (на ангельском) - https://github.com/cplusplus/draft/raw/master/papers/n4140.pdf
Последняя на данный момент версия черновика стандарта C++17 (на ангельском) - http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4567.pdf
Тонкости языка (для гурманов):
Андрей Александреску - Современное проектирование на C++ (2002) - https://goo.gl/e1V5BC
Герб Саттер - Решение сложных задач на C++ (2002) - https://goo.gl/iWaa6S
Герб Саттер - Новые сложные задачи на C++ (2004) - https://goo.gl/4nn512
Также для легкого чтения подойдет книжка c историей создания C++:
Бьерн Страуструп - Дизайн и эволюция C++ (1994) - https://goo.gl/FqbPwo
Отдельные аспекты:
Читать по необходимости.
Энтони Уильямс - Параллельное программирование на C++ в действии (2012) - https://goo.gl/qJfBkD
Николаи Джоссатис - C++. Стандартная библиотека (2012) - https://goo.gl/PEyiMH
Дэвид Абрахамс, Алексей Гуртовой - Шаблонное метапрограммирование на C++ (2009) - https://goo.gl/isSt7j
Дэвид Вандевурд, Николаи Джоссатис - Шаблоны C++. Справочник разработчика (2003) - https://goo.gl/0M4NpG
Роберт Седжвик - Фундаментальные алгоритмы на C++ (2001) - https://goo.gl/4jwxSl (части 1-4), https://goo.gl/yDuQgG (часть 5)
Q: Хуле тут так сложно? Я открыл учебник, там какой-то ад!
A: Попробуй учебники, изданные после 2011 года. Фичи последних стандартов не только добавили выразительности, но и серьезно упростили жизнь разработчиков. Теперь программировать на C++ стало проще, чем когда-либо! Это не отменяет необходимости прочитать несколько серьезных книжек, чтобы написать на нем что-то годное. Тем не менее, да, C++ это по-настоящему сложный язык. Его никак не получится выучить за 21 день, ну вот совсем никак. Более того, крайне нежелательно пытаться изучить его первым, если ты раньше вообще не программировал. С большой вероятностью это приведет к разочарованию и потере времени. Гораздо лучше будет начать с другого языка и базовых вещей алгоритмы, архитектура пека, операционные системы, а уже потом вернуться к крестам.
Q: Ты охуел? В этих книгах по тысяче страниц! Хочу коротких статей.
A: Вот тебе блоги, факи, референсы и всякое такое:
Годный блог, в котором все просто и понятно тян не нужны кококок борщ - http://alenacpp.blogspot.ru
Блог с хорошо расписанными фичами новых стандартов - http://scrutator.me
Краткие описания библиотечных функций и контейнеров - http://ru.cppreference.com/w/ или более подробно на ангельском http://en.cppreference.com/w
Блог Герба Саттера (на ангельском) - http://herbsutter.com
Блог Скотта Мейерса (на ангельском) - http://scottmeyers.blogspot.ru
Куча других блогов (на ангельском) - https://www.quora.com/What-are-the-best-blogs-on-C++
Большой FAQ по C++ (на ангельском) - https://isocpp.org/wiki/faq
Q: Я не умею читать.
A: Можешь посмотреть какой-нибудь онлайн-курс:
Видеокурс на тытрубе - https://www.youtube.com/watch?v=atVgLRzl3rI
Еще один - https://youtube.com/watch?v=MOpF5lk3cLY
Среди прочих есть несколько курсов по C++ - https://stepic.org
И еще есть вот такое, если проникся:
Видео с CppCon (на ангельском) - https://youtube.com/user/CppCon/videos
Q: Я готов начать погроммировать! Куда мне писать код?
A: Под шиндошс удобно использовать IDE Microsoft™ Visual Studio®. Базовую версию (2015 Community) можно бесплатно скачать отсюда: https://goo.gl/qgAAc6 (русская версия) или https://goo.gl/WIPW9L (ангельская версия). Чтобы начать писать код, нужно запустить Visual Studio, кликнуть "Файл - Создать - Проект - Пустой проект", после создания кликнуть слева правой кнопкой мыши по пункту "Файлы исходного кода", выбрать "Добавить - Создать элемент - Файл C++". Свои хэллоуворлды писать в этот файл, в дальнейшем можно добавить другие файлы и хедеры. Чтобы скомпилировать и запустить проект, нужно нажать "Сборка - Собрать решение", а затем "Отладка - Запуск без отладки".
Под *nix, как правило, уже предустановлен компилятор gcc (если нет, используй sudo aptitude install gcc), так что достаточно сохранить хэллоуворлд, набранный в текстовом редакторе, и выполнить g++ helloworld.cpp и ./a.out. Но удобнее установить какую-нибудь IDE, например, весьма удобную CodeLite (sudo aptitude install codelite codelite-plugins), и работать в ней. Ее также можно использовать и в шиндошс, но тогда сперва придется установить MinGW (http://mingw.org).
Еще у нас есть IDE, призванная похоронить Visual Studio пока не особо получается. Она стоит денег, но можно украсть почти не протухшую версию на торрентах или получить бесплатную лицензию по скану студбилета, если ты студент. Удобные свистелки и перделки присутствуют. Тормоза и баги присутствуют. Кросплатформенность присутствует - https://www.jetbrains.com/clion
Можно также не устанавливать ничего, а запускать свои хэллоуворлды на http://ideone.com, выбрав в левом нижнем углу язык C++14.
Q: Не буду я все делать сам! Подавайте сюда софт, который все сделает за меня и подотрет мне жопу!
A: Без проблем:
Статический анализатор, который умеет находить в коде ошибки и неоптимальные места. Швабодный. Есть плагин для Visual Studio - http://cppcheck.sourceforge.net
Детектор утечек для Visual Studio. Предельно прост в прикручивании - https://vld.codeplex.com
Гугловские утилиты для контроля корректности кода - https://github.com/google/sanitizers
Гугловский фреймворк для автоматизации тестирования - https://code.google.com/p/googlemock
Q: Мне надоело писать велосипеды, какие у вас тут популярные либы?
Q: Нужно зделать %монструозная_хуйня_нейм, но я обосрался от одной мысли о написании ее с нуля, что же делать?
A: Гляди сюда:
boost
Бесспорно, это самый популярный набор C++-библиотек. Не будет лукавством сказать, что C++ во многом обязан популярностью именно ему. Воистину всеобъемлющий, boost способен удовлетворить твои самые скотские фантазии. В нем есть практически все - от математических функций до сетевых компонент, от инструментов тестирования до динамических типов. Функции для работы с твоей мамашей там тоже есть. Разумеется, все это швабодное и работает на любых платформах. И да, boost является своеобразным инкубатором хороших библиотек, поэтому наиболее удачные из них с большой вероятностью можно будет увидеть после принятия очередного стандарта уже как часть стандартной библиотеки.
Недостатком boost можно считать его размер - более 300 мегабайт. Большинство компонент boost не являются независимыми, и попытка использовать один единственный контейнер обернется фактическим подключением 2/3 всего присутствующего в комплекте. Таким образом, если boost не будет использоваться на полную, лучше юзать другие, более специализированные библиотеки.
http://www.boost.org - скачать бесплатно без смс.
http://sindicollo.blogspot.ru/2008/09/boost.html - документация к некоторым компонентам.
http://www.boost.org/doc - документация (на ангельском).
Литература:
Ариндам Мукерджи - Learning Boost C++ Libraries (на ангельском) (2015) - https://goo.gl/b0gPN1
Qt
Существует швабодный кроссплатформенный фреймворк-надмножество C++ под названием Qt. Он содержит довольно большое количество компонент (для работы с сетью, базами данных, для юнит-тестирования и др.), но киллер-фичей и основным полем его применения являются возможности по разработке графических интерфейсов. Qt сам по себе, как расширение языка, предоставляет для этого более удобные средства, чем обычные библиотеки, а использование специализированных IDE наподобие Qt Creator позволяет в буквальном смысле собирать интерфейсы мышкой, а код писать только по существу.
Тем не менее, использование Qt нельзя однозначно назвать хорошей практикой. Во многом это уже не C++, а другой язык, со своими концепциями и паттернами. Qt-код требует дополнительного препроцессинга при помощи встроенных в Qt утилит (т.н. метаобъектная компиляция), поэтому не получится просто подключить Qt как обычную библиотеку и использовать свой любимый компилятор без дополнительного софта. Нельзя сказать, что это существенное препятствие, но есть мнение, что использование Qt нарушает дух C++, раздувает машинный код и порождает макак-любителей кодогенерации.
В настоящее время основные версии Qt - 4.8 и 5.х, полной обратной совместимости между ними нет как в пистоне, ага.
http://www.qt.io/ru - скачать бесплатно без смс.
http://doc.crossplatform.ru - документация к 4.8.
http://doc.qt.io - более полная документация к обеим версиям (на ангельском).
Литература:
Макс Шлее - Qt 5.3. Профессиональное программирование на C++ (2015) - https://goo.gl/aZ66gK
Макс Шлее - Qt 4.8. Профессиональное программирование на C++ (2012) - https://goo.gl/Slb1In (книга) + https://goo.gl/toUDWc (исходники примеров)
Марк Саммерфилд - Qt. Профессиональное программирование (только Qt 4.х) (2011) - https://goo.gl/qpkZFm (книга) + https://goo.gl/LIIECh (исходники примеров)
Другие хорошие библиотеки:
Несколько специализированных библиотек для часто встречающихся задач. Все маленькие, быстрые и простые в освоении:
libcurl - сишная библиотека для работы с сетью (существует также curlpp - крестовая обертка для нее, но использовать ее не стоит, ибо разработка заброшена еще в 2009 году) - http://curl.haxx.se
SFML - работа с графикой и аудио - http://www.sfml-dev.org
FLTK - графические интерфейсы - http://fltk.org
И еще куча библиотек на любой вкус - http://en.cppreference.com/w/cpp/links/libs