Это копия, сохраненная 25 января 2016 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Рабам крестов, что слепо уповая,
Стремятся байтоебствовать всегда:
Здесь жаждут скоростей, не признавая,
Что кто-то может прочитать их код,
И уступить удобству не желают.
О боги! Столь несчастен будет тот,
Кто обречен тестировать ту массу,
Что в ста коленах Бьерна проклянет.
А свыкнувшись, сам станет пидорасом.
TL;DR Читаешь https://goo.gl/kVaela , делаешь примеры и суешь в http://ideone.com , ошибки копипастишь в гугл, непонятное ищешь в предыдущих тредах, спрашиваешь в этом треде, если не нашел. Если тебя послали на хуй или не ответили, то ты спросил платину, читай предыдущие треды внимательнее. И прочитай FAQ, расположенный ниже, в нем много полезного.
Унаследованная памятка:
Вопросу по синтаксису идут на хуй.
Лабы идут на хуй.
"Как мне сделать Х на чистых крестах без библиотек" идут на хуй.
Все идут на хуй.
Хейтер сосет члены на пару со своей мамашей.
Тег [code] работает через жабаскрипт-костыль: https://github.com/ololoepepe/MakabaCode
Старший брат: >>579550 (OP)
Предыдущий: >>597189 (OP)\r\n\r\n
\r\n\r\nFAQ:
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\r\n\r\n
\r\n\r\nQ: Я готов начать погроммировать! Куда мне писать код?
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
Добавлена книга Абрахамса-Гуртового по метапрограммированию.
Code::Blocks заменена на CodeLite из-за ее очевидных преимуществ.
Предыдущие треды на архиваче:
https://arhivach.org/thread/94971/
https://arhivach.org/thread/94972/
https://arhivach.org/thread/99414/
https://arhivach.org/thread/100995/
https://arhivach.org/thread/105148/
https://arhivach.org/thread/109335/
https://arhivach.org/thread/112797/
https://arhivach.org/thread/114519/
https://arhivach.org/thread/117109/
https://arhivach.org/thread/120019/
https://arhivach.org/thread/122683/
https://arhivach.org/thread/124637/
https://arhivach.org/thread/125532/
https://arhivach.org/thread/127327/
https://arhivach.org/thread/128133/
Старые ненумерованные треды:
https://arhivach.org/thread/45477/
https://arhivach.org/thread/48611/
https://arhivach.org/thread/60085/
https://arhivach.org/thread/66322/
https://arhivach.org/thread/69413/
https://arhivach.org/thread/73221/
https://arhivach.org/thread/77999/
https://arhivach.org/thread/79194/
https://arhivach.org/thread/82038/
https://goo.gl/vvs9GP
https://goo.gl/ZnBsYt
Отдельные Qt-треды:
https://arhivach.org/thread/15387/
https://arhivach.org/thread/65590/
Добавлена книга Абрахамса-Гуртового по метапрограммированию.
Code::Blocks заменена на CodeLite из-за ее очевидных преимуществ.
Предыдущие треды на архиваче:
https://arhivach.org/thread/94971/
https://arhivach.org/thread/94972/
https://arhivach.org/thread/99414/
https://arhivach.org/thread/100995/
https://arhivach.org/thread/105148/
https://arhivach.org/thread/109335/
https://arhivach.org/thread/112797/
https://arhivach.org/thread/114519/
https://arhivach.org/thread/117109/
https://arhivach.org/thread/120019/
https://arhivach.org/thread/122683/
https://arhivach.org/thread/124637/
https://arhivach.org/thread/125532/
https://arhivach.org/thread/127327/
https://arhivach.org/thread/128133/
Старые ненумерованные треды:
https://arhivach.org/thread/45477/
https://arhivach.org/thread/48611/
https://arhivach.org/thread/60085/
https://arhivach.org/thread/66322/
https://arhivach.org/thread/69413/
https://arhivach.org/thread/73221/
https://arhivach.org/thread/77999/
https://arhivach.org/thread/79194/
https://arhivach.org/thread/82038/
https://goo.gl/vvs9GP
https://goo.gl/ZnBsYt
Отдельные Qt-треды:
https://arhivach.org/thread/15387/
https://arhivach.org/thread/65590/
Где-то я слышал, что книги Мейерса хорошо дополняют друг друга и было бы неплохо (нужно) начинать читать с первого издания. Поясните в общем.
>volatile
Никакого эффекта.
>А сообщения выводяться?
Индикаторы на порту не мигают, так что видимо нет. Сниферить мне к сожалению нечем.
м... я думал var это типа общая переменная с устройством, посмотрел внимательней - ты ее вроде собрался куда-то отправлять после того как твой do{}while отработает. Так вот, он никогда не закончится, точнее тот код что после него никогда не выполнится.
Да var должен отправится в COM порт где его считывает устройство. А этим do while, я хотел, что бы моя консольная менюшка, банально, не сворачивалась после выбора варианта.
Да, не посмотрел в тело цикла, сорян.
Читай последние издания каждой книги. У него их 3 вроде или 4 (эффективное c++, еще более эффективное, stl и C++14)
Мб первые 2 -- одно и то же, не помню уже
Да, чего-то я всё по уебански сделал вчера. Сегодня проспался и сделал более или менее нормально - отправку отдельной функцией, которая принимает значение var из цикла меню.
QT - много ебли со статической линковкой.
Borland C++ - Платное, много ебли с подключением библиотек, к примеру для serial port.
Как заставить это скомпилироваться? Я переопределяю create и говорю - вот так можно создавать объект типа Pair, но он ругается, мол, у базового-то класса нифига не подходит сигнатура.
Твоя базовая фабрика умеет создавать только объекты классов с одним аргументо в конструкторе. Расширеную фабрику ты наследуешь от базовой фабрики для типа pair у которого нет конструктора с одним элементом, следовательно не возможно создать базовую фабрику для типа pair, следовательно нельзя от нее отнаследоваться. Тебе или нужно дать типу pair конструктор с одним аргументом типа int http://ideone.com/yQu8rh или инстанциировать фабрику от другого типа, а не pair.
Ок. Тогда не буду ебать себе моск и заюзаю C#.
Не одно и то же, там совершенно разные советы. Поэтому все четыре есть в шапке.
Юзай какой-нибудь Revo Uninstaller. А разгадка одна - тот, кто очищает папку Program Data в погоне за местом, будет страдать из-за удаленных файлов деинсталляторов.
Там годно написано, но нет про C++11, придется переучиваться.
1) Obj-C используется только в эплопроизводстве или широко распространён?
2) Чистый Си проще плюсов?
3) Насколько у Си и плюсов различная сфера применения? Можно на одном делать всё то же, что и на другом?
Опыта с дирехт х у меня естественно никакого, что почитать по этой теме? С чего начать?
Ты какой-то дурак. Я не знал ни си, ни плюсов, но пошёл и начал ебашить тестовые задания. Быстро вкатился, хоть и было много проблем. Через два года уже пролистал книжку.
const std::unique_ptr<uint8_t[]> &my_array()
{
static const std::unique_ptr<uint8_t[]> not_temp = some_array();
return not_temp;
}
Нет, я сейчас попробую оправдаться, что some_array() я использую из прикрученной библиотеки, но тем не менее, всё равно на лоботомию?
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 байт
Зависит от платформы
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 байт
Зависит от платформы
Толсто.
>QT - много ебли со статической линковкой.
http://habrahabr.ru/sandbox/95171/
Вот по этому делал, и все получилось.
http://wiki.qt.io/Building_a_static_Qt_for_Windows_using_MinGW
А тут концовка. Конкретно где в проекте статику и динамику выбирать.
Под winXP.
Вопрос таков - мне стоит дрочить мобайл в надежде найти работу или лучше пойти на С++ или жабу в компании рядом, получить опыт работы с умными ребятками и потом сделать перекат в интересную мне сферу?
Один успешный погромист из амурики говорил идти в С++ компанию, потому что в 95% реально интересных и крутых проектов даже в мобайле, вебе или подобном всё равно желательно уметь в языки типа си, плюсов или жабы, потому что это СТАНДАРТ, а первые два ещё и закладывают хорошее понимание работы "под капотом".
Ну и приводил в пример вакансии, всюду вроде рили написано в требованиях что-то типа:
- 3 года опыта работы с одним из языков типа C++/Java/C#/Scala/etc
- 3 года опыта работы с Python/Objective-C/etc ну или другой язык по которому вакансия
Карочи, как отдельные пункты.
Он всё правильно мне сказал и рили стоит потратить время на это? Будет ли отдача реальная или сразу в мобайл пиздовать и хуи забить?
Сильно ли прогресс "прокачки скилла" зависит от старших коллег которые будут пинать?
Спасибо.
опыт работы - разработка говна при универе, лол не лаба1, это говно все ещё юзают для документооборота
Ах да, спрашиваю у вас, потому что думаю тут есть те, кто писал на плюсах и сделал перекат или пишет на плюсах и сделал перекат с другого языка, поэтому может поделиться опытом пользы работы с подобными языками.
В мобайл идут не от большого ума - или вакансия попалась (рынок больше), или хотят фрилансить (порог вхождения ниже), но вот специально туда идти... Что такое мобильный софт? Примитивные аппликухи, которые за любым чихом лезут на свой бэкенд через интернет. Редко что-то считается на месте, но тут, опять же, придется портировать код с бэкенда. По сути ты будешь бесконечно дрючить UI, а это на любителя. Игры тут - верх технологичности.
Правильный ответ - идти на С++ вакансию и, если получится, ты сам забьешь хуй на этот мобилософт.
Бля, помогло. Спасибо, анон
Воу, воу, полегче. Откуда у тебя такая хуйня? Что это? Почему DX, а не OGL?
>>607720
Для тебя и таких, как ты, придумали OpenGL. Который практически никак не отличается. Откуда вы вообще берётесь?
>>607895
Ещё один. Во-первых, не пали годноту, уёбок, пусть OpenGL дрочат. Во-вторых, откуда вообще ты взялся? В-третьих, Франк Луна тут не сильно поможет, ему всё-таки не 3D-модельки нарисовать надо, а интерфейсный элемент. А для этого есть Direct2D с совершенно другими правилами, методами и функционалом.
При статической линковке половина либ же нафиг выкидывается, не?
Скомпилил статическую версию QT 5.4 по инструкции
http://habrahabr.ru/sandbox/95171/, наткнулся на такую ошибку при попытке собрать проект:
:-1: ошибка: dependent 'D:\Qt\5.4\Static\lib\Qt5Widgets.lib' does not exist.
И действительно. Там нет ни одного файла с расширением lib, есть только Qt5Widgets.prl.
Что делать в этом случае?
Какой же ты мудак блять, в вопросе написано, что сделать надо с использование дирехтх, не опенжл, а дирехтх, нет надо выеба гнуть, на говно исходить.
>Почему DX, а не OGL?
Потому что так решили в той фирме, не нравится - скажи им это, они тебе непременно не перезвонят.
int main () {
int a, b;
printf (“Введите два числа: \n”);
scanf ( “%d%d” , &a, &b);
printf (“%d\n” , a + b);
return 0;
}
Поясните за %d%d. Что это и зачем юзают?
цифра цифра. Формат ввода обозначают.
Он там пишет что на ошибки внимание не обращай. У меня тоже какие-то писал. Однако все работает.
Ну и еще, запусти MaintenanceTool.exe и проверь, точно ли ты установил все библиотеки и их исходники, и той ли версии. У меня все выглядит как на пике. Кстати обнови там все до последней версии через этот же тулз.
Тогда встречный вопрос: как теперь подключить QTгную библиотеку serialport?
Кодес такого вида:
hui(vasya228 config) : m_hui(make_shared<vasya228>(move(config)))
Собсна, если инициализировать конфиг на стеке я не потеряю эту хуитку после его очистки? я знаю что это всё хуйня и можно не ебать мозга, но ведь 228 оптемезацея скорасть...
И ещё, поясните нахуя нужны конструкции вида &&hui или zalupa при исп. обычных структур/классов, а не двумерных массивов.
8 и 10 неправильно, от платформы зависит.
Да, если в качестве аргумента будет ссылка на базовый класс.
Пиздец, куда таскать?
1. куда вы тащите свое говно?
2. лицензия не позволяет ПРОСТО без задней мысли это делать.
так нахуй весь этот цирк?
>пик
Но ведь у си не такой уж-то и поехавший синтаксис, вот у крестов да - полный пиздец.
>вот у крестов да - полный пиздец.
Работаю 8 лет с крестами, ни разу не видел пиздеца. А хуевый программист на чём угодно невнятного говна напишет.
DPP_DELEGATE2_OBJ(de, void, (const math::Vector2 &v2d),
const math::Vector3::put_delegate_t &, f, // _0
const const_ref<curve::Base> &, _curve, // _1
{
_0(math::Vector3(v2d, _1->sagitta(v2d)));
});
Но тут суть в не этом, а в том, что подобного легаси-говна килотонны. И в каждом проекте каждый делает кто во что горазд. И это таки полный пиздец.
Блядь, а нахуй мне их перезванивание? Наоборот, я хочу, чтобы эта фирма уже никогда не смогла никому перезвонить. Пиздец, в России только человек 5 знают DX на моём уровне, а благодаря этой компании появляются такие >>607720 личности, которые своими "А Я ТОЖЕ ХОЧУ" портят всю элитность DX.
>>608226
Да похуй. Главное, чтобы в мой DX не лезли.
Forward declaration.
Олсо, анон->>608638, есть кулстори, как в DX вкатился и добрался до такого уровня. Надеюсь не пиздабол. Я не из России, не бойся твоё место не займу
помогите пожалуйста разобраться с проблемой в коде, в нём есть базовый класс и 3 производных класса, нужно переопределить метод get_name так, чтобы при его вызове выводилось название производного класса, но почему-то выводится название базового класса, причём код на строках 83-87 работает корректно, а вот код на строках 92-110 уже не работает, хотя вроде всё также пишу
http://pastebin.com/Dtw12vvh
Переписал пример второго хелловорлда с книги Щупака "Win32 API. "Эффективная разработка приложений."
Программа не работает. Подробности на пике.
KWnd.h - http://pastebin.com/mGgcZnJM
KWnd.cpp - http://pastebin.com/knFzzCjV
main.cpp - http://pastebin.com/EMqQBcFF
Потому что (@ - звёздочка)
T@ mas[N]; - массив указателей (mas имеет тип T@@, грубо говоря, то есть указатель на массив указателей)
а
T@ mas = new T[N]; - массив объектов (mas имеет тип T@, то есть просто указатель на объект)
Итого в твоём примере на строках 92+ or имеет тип instrument@, а значит or имеет тип instrument, т.е. объект, а не указатель
>а значит or[0] имеет тип instrument
походу макаба как тэг сожрала
Бля, как-то сумбурно написал, но может поймёшь
а как сделать так, чтобы get_name выдавал имя производного класса? Если писать вот так
http://pastebin.com/59AU70X8
то выдаёт название базового класса
Используй массив указателей на тип instrument http://ideone.com/5wSYGi
Когда ты объявляешь массив элементов типа instrument то в этот массив можно записать только элементы типа instrument, и производные от него конвертятся при записи в базовый.
В студии с MFC, но это чуть повысокоуровневей, чем WinAPI
Да ничего особенного. Ещё до того, как поступил в универ, хотел заниматься графикой. Первые пару лет хватало небольших попыток начать учить 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.
Да ничего особенного. Ещё до того, как поступил в универ, хотел заниматься графикой. Первые пару лет хватало небольших попыток начать учить 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.
Сам дзен постигаю. Вряд ли я бы пошёл на обычную работу со всеми этими дедлайнами, тимбилдингами, корпоративной культурой и прочей чешуёй, которая не даёт почувствовать себя свободно.
Ну и да, где ты видел из России за последние лет 5 что-то, кроме игр на мобилки?
Разобрался сам. Я забыл указать значение поля lpfnWndProc;
Блять, я-то думал ты там бабло на этом пилишь норм и не хочешь, чтобы конкуренты в сферу лезли.
Ну варгейминг тот же. Корабли в Питере, танки в Минске. Да и хватает, наверно, контор с не мобилками и социалками
>из России за последние лет 5 что-то, кроме игр на мобилки?
еще в социалках игрухи
есть еще такая тема как аутсорс игрового контента
еще иногда саппорт долгоживущих проектов типа ммо скидывают (но редко), включая таскинг (багфиксинг и фичреквестинг)
И с чего ты взял, что ты его на высоком уровне знаешь, клоун.
>Напишите функцию, которая обрезает пробелы в конце переданной ей строки. Функция должна быть написана в расчёте на работу с очень длинными строками с очень большим количеством пробелов, оптимизирована по количеству обращений к памяти. Сигнатура: void TrimRight( char *s );
P.S.
: http://ideone.com/gNIlCG
Парни, что ещё можно с этим сделать?
typedef то че не юзаете, в тех случаях когда старом стандарте работаете
вся эта длинная stl поебота заворачивается, включая и итераторы
Анончики, помогите. Лаба горит
Препод на паре пояснял этот алгоритм создания выпуклой оболочки. Я её пропустил и нихуя не понял. Где можно найти гайд по работе этого алгоритма? Сам пытался загуглить, не нашел.
То бишь назначение программы мне понятно, мне непонятно, как она работает.
>Напишите функцию, которая обрезает пробелы в конце переданной ей строки. Функция должна быть написана в расчёте на работу с очень длинными строками с очень большим количеством пробелов, оптимизирована по количеству обращений к памяти. Сигнатура: void TrimRight( char *s );
P.S.
: http://ideone.com/gNIlCG
ответ, что не так:
>"Несмотря на то, что решение является оптимальным по количеству обращений к памяти, оно во-первых выдает некорректный ответ на некоторых строках, а во-вторых может повредить динамическую память."
Парни, подскажете, что ещё можно с этим можно было сделать?
Ну что же вы, аноны?
1) Obj-C используется только в эплопроизводстве или широко распространён?
2) Чистый Си проще плюсов?
3) Насколько у Си и плюсов различная сфера применения? Можно на одном делать всё то же, что и на другом?
4) Насколько у шарпа и плюсов различная сфера применения? Можно на одном делать всё то же, что и на другом?
1) >>только в эплопроизводстве
2) >>проще
3) >>Можно.
Сфера - у крестов весть линух + вся системщина на современных осях, плюсы - более прикладные и среднеуровневые вещи (обычный гуй софт, сервера, игрушки).
4) >>различная
Не совсем. Шарп - чисто прикладной язык, бОльшая часть софта на сперме, тяжелые игрули 40-60% области плюсов на нем не попишешь.
Ну дык не реаллоцируй память вообще. Просто замени первый символ в последовательности замыкающих пробелов на \0. И для этого можно идти с конца строки, тогда не обязательно ко всем символам строки будет обращение
>Отсортировать эти слова по алфавиту, использовать односвязный список
Кто у вас задания придумывает? Это ж пиздец.
> И для этого можно идти с конца строки,
Чтобы идти с конца строки, надо для начала получить индекс последнего элемента. Это делается проходом до конца, если я не ошибаюсь. А применение функции - strlen, это ведь тоже проход до конца?
> Ну дык не реаллоцируй память вообще.
С этим согласен. Наверное не стоило выёбываться.
Но они говорили про оптимизацию и т.д. Подумал, что правильно было бы очистить память, хотя применение релоак тоже тяжкая вещь. кажется
Спасибо, понял.
Это не принципиально - куда должна выдаваться.
хотя .. вот это вроде бы даёт понять :
> Сигнатура: void TrimRight( char *s );
Что значит "не принципиально"? Если надо куда-то в файл выдавать, то и занулять ничего не надо. Если на консоль, можно тоже с помощью функций IO. А откуда она берётся? Начальную длину можно узнать без strlen?
А чем этих людей string не устраивает?
Считай что ты пишешь универсальную функцию, которой похуй что потом с этой строкой будет. Просто вот пиздецки нужна строка без пробелов.
Если пишу универсальную функцию, то передам в неё строку и её длину, а верну из неё длину без пробелов в конце.
cout << "Bump";
Похуй. Первый язык выбирается не чтоб что-то сделать, а чтоб научиться основным принципам и написать несколько рабочих программок.
Питон для этого норм, простой и без мозгоебства.
Кроме того, не слишком сложные технически игры на нем отлично работают (и даже библиотечки/движки есть), а сложную ты, будучи ньюфагом, не напишешь. А когда уже не ньюфаг - в другой язык перекатиться несложно.
Чему завидовать? Мне нет дела до твоих знаний, ни дх, ни огл не интересны. Просто
>Названия книг говорить не буду, мало ли кто-то тут их решит прочитать.
- это же пиздец, самому-то не смешно разве?
Ну смотри. Сейчас я чувствую себя счастливым. Потому что играю не по правилам - в мире популярности OGL среди любителей и даже многих профессионалов я использую DX. А теперь представь, что я расписал здесь всю годноту. К чему это приведёт? А к тому, что в DX может набежать толпа ололокающих школьников. Которым дали прямой рецепт, как стать илитнее и умнее. Дальше они своим неадекватством начнут дискредитировать DirectX. И в итоге сложится общественное мнение, что на DirectX пишут только ололокающие школьники.
К чему это приведёт? А к тому, что мне даже заикаться нельзя будет про своё хобби. Вместо уважения или прямых посылов нахуй я буду слышать лишь насмешки. И всё, перестану быть счастливым. Поэтому нет, нельзя.
И да, как же я рад, что по DirectX нет нормальной литературы на русском языке. Как же я рад.
Да ладно, блядь!
Valve, тонны инди-разрабов от Эдмунда Макмиленна до Klei Entertaiment, даже вот Crytek нанимали OGL-разработчиков. Андроид и iOS кодинг - OpenGL. Все университетские курсы в любом МГУ - OpenGL. Научная деятельность - OpenGL. Да блядь, даже запрос "3D Graphics tutorial C++" в гугле выдаёт OpenGL!
На DX пишут только ультра-AAA разработчики. Титаны индустрии. Ну и я.
Но я серьёзно.
>>609177
Если иметь правильные источники информации, возможность практиковаться и достаточно ума и времени, чтобы всё это освоить, то можно овладеть чем угодно. Было бы желание.
Возможность практиковаться в DirectX, к сожалению, есть у каждого. Времени у ололокающих школьников полно. Ум и желание у некоторых экземпляров попадается. Остаётся информация. Нельзя допустить, чтобы любой качественный источник информации стал известен публике. А не то последствия будут непредсказуемы.
>все едят на ужин еду, а я говно, но на самом деле это круто, ведь только я ем говно, значит я клёвый
Нахуй иди, зелёный.
SFML не слишком отличается от SDL. Если будешь писать на плюсах, то бери SFML. Вообще они оба неплохие, но SFML куда более объекно-ориентированный. Плюс это или минус для тебя — решай сам.
Больше я опыта ни с чем не имел, кроме этих двух. ОБа кроссплатформенные, да.
Можешь называть меня как угодно. Но у меня есть знания. Нет, не знания ваших попсовеньких Boost или Qt, не энтерпрайзной параши и даже не OpenGL, информация о котором доступна любому быдлану. Нет, я у меня есть знания закрытого, проприетарного стандарта. Многих закрытость пугает. Многие боятся, что вдруг придётся платить отчисления Майкрософту за любую написанную программу? Но я не такой. Я знаю правду. Я не боюсь. И я охуенно счастлив, что у меня есть DirectX.
Это скорее плюс. Спасибо за ответ. Разобрался, нужно было добавить пару ключей при компиляции. Не подскажешь каких-нибудь годных статей (можно на английском) для начала?
Не знаю, я просто читал документацию с официального сайта SFML.
Начинал я с SDL по туториалам Lazy Foo', потом перекатился в SFML без всяких туториалов, просто читая документацию.
Короче, тут вроде как есть всё, что тебе нужно.
http://www.sfml-dev.org/tutorials/2.3/
Под "нормальной проприетарщиной" ты подразумеваешь протухание десятками лет на одном и том же пакете одной и той же версии, делая всё то же самое, что и 10 лет назад?
Ну и в конце концов, посмотри на WinAPI. Потрясающая библиотека. Актуальна до сих пор. А ведь написана в начале девяностых.
И да, у тебя есть своя голова-то? MS скажет. Ну и пусть говорит, что хочет, как это тебя-то касается? Запретить писать на том, что ты используешь сейчас, тебе никто не сможет. Более того, чем больше кодеров уходят на "инновационные средства разработки ПО", тпи более элитен ты.
>Чем больше людей вышло из пещер и натянуло плавкы на зад, тем более илитен ты, сидящий голой жопе на куске говна
>Потрясающая библиотека
С этим не поспорить. Винапи потрясает тем, через какую жопу она сделана.
Ты с компграфа штоле, маня? Пока ты дрочишь свою мелкомягкую хуитку, даже тянки успели вкатиться в серьезный бизнес.
https://cs.msu.ru/news/2280
>Потрясающая библиотека. Актуальна до сих пор. А ведь написана в начале девяностых.
Ехал воид через воид
Видит воид в реке воид
Сунул воид воид в дефайн
Цапнул дефайн войд за VOID
Обосрался воед-ВОЕД, создал 10 указателей на строку
А указатели на строку - не просты, а золоты близнецы.
Заразился духом мочератора-муделя, перекатывавшего тред 2 дня, соре.
Ну что, молодец она. Только вот её тема мне не слишком интересна.
>>609276
Не станет, но может. А вот в WinAPI может не каждый.
>>609281
Так это и круто. Капс выглядит брутально. Венгерская нотация выглядит пленительно и сложно. А сама архитектура? Блядь, да в сраном Си использовать полноценные классы! Причём так оригинально - по указателю лежит структура-дескриптор, а за ним данные. А теперь скажите, хоть кто-нибудь, кроме майкрософта, додумался бы до этого? А?
>Не станет, но может. А вот в WinAPI может не каждый.
Каждый может, кому интересна сфера. Но редкий даун жрёт говно, когда оно давно протухло.
>кто-нибудь, кроме майкрософта, додумался бы до этого? А?
Уносите толстого. Восхищаться всяким говном можно сколько угодно. Я ковыряю блядские байты богом забытой игры, которой 20 лет. Я тоже восхищаюсь структурой и всеми ухищрениями и взаимозависимостями, которые так нахожу, реверся код. Это невероятно и охуительно, в это тоже НЕ КАЖДЫЙ СМОЖЕТ, но это нахуй никому кроме меня не нужно и я это понима. И ничего в этом илитного нет. Но ты ещё и слагаешь как мудак.
>использовать полноценные классы
Неполноценные. В отличие от крестов, тут не будет compile-time проверок, а с безопасностью теряется и вся суть классов.
>в это тоже НЕ КАЖДЫЙ СМОЖЕТ, но это нахуй никому кроме меня не нужно и я это понима
Но это богом забытая игра. А это библиотека, о которой знают все. Да если им дать информацию, они, как псы, вцепятся в неё.
>И ничего в этом илитного нет
А вот в этом ты неправ. Даже то, что делаешь ты, вполне элитно. Гордись этим.
>>609303
Но блядь. ЭТО СИМУЛЯЦИЯ КЛАССОВ НА СИ! Это ли не охуенно? Это всё равно, что на микроволновке ездить до магазина. Взрывает мозг.
Ты не понимаешь. Глупо дрочить на фичи, которые ничего не дают и сделаны просто, чтобы все охуели. Классы в си это блажь, потому что в C++ уже есть нормальные классы, но при этом оверхеда перед си нет, что позволяет использовать кресты. А, например, шаблонная ебля в крестах - не блажь, потому что такое есть только в более медленных языках, пусть даже более удобно реализованное. Если тебе нужно просто выебнуться, а не дело сделать, то используй какой-нибудь Brainfuck, с ним все равно будет запутаннее.
>>609342
>Монополию?
Не только. Очень много негативных последствий. И для направления и для развития. Но ты прав, что когда специалистов слишком много, это плохо. Люди перестают цениться, не смотря на то, сколько они потратили времени на обучение и насколько высококлассными они являются.
Тут поможет завышенный порог вхождения, допустим на собеседованиях, принимать по результатам олимпиадных задач, как это делают во всяких гуголах. Но ты ведь сам тогда рискуешь оказаться не у дел, илита.
>>609352
>не только двигаться дальше, но и облегчить жизнь тому дурака, который пойдет по твоим стопам
Я забыл проаргументировать это.
Так вот — вернёмся к той забытой богом игре. Кажется, в 2000 или около того был один парень, достаточно глубоко разобравшийся в вопросе. Он мало что за собой оставил, поэтому мне пришлось копать свой тоннель. Однажды, я всё же разыскал того парня. Он тогда уже дропнул работу в senile team (старая геймдев контора) и уехал в китай. Я тогда уже запутался, но всё же смог с ним связаться. На мои вопросы он не ответил, сказав, что уже забросил всё это. Не удивительно, ему уже и лет-то дохрена.
Я разобрался во всём самостоятельно, но в любом случае очевидно, что прогресс не представляется возможен без передачи знаний.
3 - можно, да, но некоторые вещи в крестах проще/быстрее реализовать.
>ему уже и лет-то дохрена
Тру олдфагов только на с/с++ можно встретить? Вообще к годам 50-60 есть кто продолжает именно кодить?
Саттер вроде кодит еще. Емнип он тимлид в команде Visual Studio.
http://www.boost.org/users/history/version_1_60_0.html
Код не видел (сижу с тостера), но надо просто объявить get_name как virtual и хранить в массиве указатели (а объекты создавать в куче например)
послушай, первое что ты должен уяснить, если хочешь писать продакшен на крестах - не юзать stl
второе - не подключать буст
а теперь иди нахуй
Аминь.
>Плюсоебство - это как православие. Когда протестантизм завещает работать над собой и создавать блага, славя величие Господа, православие требует от последователя искупления греха, посредством непрерывного страдания, как страдал Иисус неся свой крест.
>не юзать stl
Хуёвая затея.
>не подключать буст
А вот это уже нормальный подход.
>а теперь иди нахуй
Нет ты.
мимо тот вася которому ты отвечал
>Хуёвая затея.
сделать stl стандартной библиотекой - это была вторая самая большая ошибка страуструпа и комитета
ну а если практически подходить к этому, ведь приложения пишутся на основе какого-либо фреймворка (что куте, что связка atl+wtl, что mfc, что борландовские фреймворки, да мало ли их), а когда вдобавок начинают юзать stl, в результате происходит смешение стилей программирования (и не только на уровне синтаксиса, но и семантически)
самые мерзкие потроха прог что я видел - лапша из stl, си-кода с вызовами стандартной сишной библиотеки, winapi а поверх этого какой-нибудь фреймворк еще
самые охуенные проекты (и соответственно, чуваки которые их делали охуенны) - юзали, положим борландовский билдер, дак они писали собственные пакеты и компоненты, так же как и стандартные пакеты в билдере, а все сторонние библиотеки, что нужно было подключать + все winapi заворачивали в это, получался код единого стиля
или тоже самое, но проекты были запилены на связке atl+wtl
Так ты, блядь, уточняй. У нас, например, ядро проекта запилено на C++ & STL & Boost. Никакого куте, мфц, винапи и прочего. Собирается в толстую dll'ину с известным интерфейсом.
А вот на это сверху уже лепится гуй на куте. И за стл в гуе у нас больно дают по рукам, ибо вот тебе куте - его и люби.
Ой бля. Если ты не в курсе, что модульность - одна из главных концепций ООП, нахуй ты что-то пишешь? Если с тобой работают быдлокодеры, которые срут под себя - это не проблема используемых библиотек.
Малаца
еби fltk
а теперь открывается первая и самая главная проблема крестов - а именно отсутствие abi, что у вас на границе модулей? - скорее всего, голый сишный интерфейс
и что получается - в библиотеке stl + boost, на границе модуля - голый си, а гуй на qt, итого получается та же лапша
а теперь сравни это с тем когда ты используешь объектные системы сделанные на сях - com под винду и gtk под юникс-семейство
не говоря уж про динамическую загрузку модулей в языках ml-семейства, сборки в дотнете, загрузка классов в ява
Ты какую-то глупость спизданул сейчас. Лапша будет, если в коде рядом находятся разные концепции. Когда разные модули написаны разными концепциями и даже на разных языках - очень хорошо, потому что в каждом модуле можно использовать инструмент, заточенный под определенную задачу. В самых узких местах нахуярить на си, да с simd-инструкциями, в регулярном коде юзать stl и другие высокоуровневые либы, а гуй вообще запилить на каком-нибудь медленном говне, но зато кроссплатформенный. Различие в концепциях между модулями не должно смущать, ибо если ты осилил одну концепцию/нанял единственную макаку, то тебе энивей все будет казаться гвоздями, и ты получишь более серьезные проблемы, чем НЕОДНОРОДНОСТЬ КОДА.
прямо на твоем примере:
пусть у тебя в либе есть какой-то рассчет - а значит это несколько структур данных + пара алгоритмов, работающих над ними
вы, как умные мальчики, все заворачиваете это в stl+boost c шаблонами, функторами вместо циклов, классами с иерархиями и перегрузками, красота в общем
а потом на границе модуля все это приходится приводить к старому си совместимому интерфейсу, по сути возвращаясь к функциям и void*
а потом в самой проге все это еще раз приводится к qt интерфейсам
получается, что помимо того что нужно закодить, нужно все это еще два раза обернуть, у вас там, как говорять layer код
а теперь сравни - я пищу com-совместимую библиотеку на atl и а гуй рисую на бейсике, примерно то же самое можно сделать на gtk, или пишу сборку на любом дот-нет языке, и юзаю ее в любом приложении на любом дот-нет языке, уж не говоря про возможность динамического подгруза класса в явке, возможность динамически грузить модули в языках ml семейства или делать вообще что угодно с исполняемым образом липс-машины (добавлять, изменять, дебажить одновременно выполняемый код в данный момент)
по сути, хочешь юзать modern с++ сейчас - у тебя один выход, а именно делать так, как сделали в casablanca - все въебашено в один большой исполняемый модуль + а наружу торчат веб-сервисы
Ну давай разберем по частям.
1. Гую не нужно знать внутреннее представление, поэтому приводить ничего не надо. Гуй в любом случае должен получить сущность, которую ему рисовать, а хранится она в map, int [] или vasyan_yoba_container - его не должно ебать. Если это происходит, то у тебя хуевая архитектура, поздравляю.
2. Если ты просто хранишь данные линейно, то ты используешь vector/basic_string/что-то подобное. У них есть методы для доступа к внутреннему си-представлению, указатель на которое можно без проблем передать в другой модуль, который понимает си-интерфейс.
3. Если ты хранишь интеллектуально (какие-нибудь множества или списки там), то да, ты не сможешь передать их между модулями, если использовались разные версии компиляторов. Но если ты пишешь то же самое без stl, фактически на чистом си, то ты проделываешь больше работы, чем для простого написания обертки в три строчки. Да еще и багов словишь.
4. "Ну и хуй с ним", - скажешь ты, - "Но запилить ABI-то все равно могли, не убудет же!" А вот нихуя. Если ты посмотришь исходники stl, то увидишь, что там достаточно много платформозависимого кода, плюс его все время перепиливают, чтобы достичь моар прироста в производительности. Если задать жесткую спецификацию, то будет существенная потеря скорости в будущем, этого допустить никак нельзя.
Потому что в вузах преподы-олдфаги так говорят и почти не преподают его. Потому что раньше до лямбд и auto STL и правда был не очень удобен. Вообще, все проблемы от неосиляторства же.
Спроси ещё, почему старые пердуны визжат про pure c, ебаный закрытый софт и прочую хуету.
>хранится она в map, int [] или vasyan_yoba_container - его не должно ебать
как ты это говно пробросишь через границу dll? (а также классы, исключения, перегруженные функции, шаблоны и прочие "вкусности" с++)
что с того что у вас в dllке нахуярен рокетсайнс на stl+boost, когда это все равно приходится обвязывать сишной обвязкой?
я те про это толкую
нету в крестах стандартного abi, как следствие нету возможности полноценной динамической загрузки кода (а приходится делать си-совместимую)
все это приводит к тому что чуть ли не треть кода - просто тупо код обвязок
на си были запилены охуенные объектные системы, самые известные - это com в винде и gtk в юникс системах
в крестах делали более-менее функционирующий abi - например, mfc - ты не задумаываясь размещал классы в mfc dllки, пробрасывал исключения через модули, еще круче было сделано в борландовском vlc - там ведь была система пакетов, часть из них была даже визуальной и использовалать тупым накидыванием на форму, хотя все ведь это лежало в dll
но проблема в том, что это были не стандартные abi
и еще раз - хочешь юзать modern с++ - делай единый исполняемый модуль, если нужно взаимодействие с ним - пробрасывай какую-нибудь форму rpc или веб-сервис
в остальных случаях будешь жрать говно
потому что изначально stl - это концептуальная библиотека, сделавшая попытку реализовать функциональный подход в языке, который этому не больно то и располагает
и огромной ошибкой было сделать из нее стандартную библиотеку языка
Ерест какую-то пишешь.
Вот есть у меня ядро которое, например, шифрует файл хитрым алгоритмом. Писано на c++ & stl & boost. На вход получает строку имяфайла (да пусть даже указатель на char), каллбэк для прогресса и каллбэк для вывода ошибки. Где там войды и преобразования?
А если требуется та лапша, что ты расписал - то архитектор мудак, а кодер - индус ебаный.
преподы-олдфаги так говорят, чтобы тупая студентота вникала в алгоритмы, а не кидала std::sort куда попало.
А тупая студентота, как обычно, не вникает и решает что стл/буст - кака и трахается с собственными велосипедами.
А нахуй вообще ваш С++ для GUI нужен, можно было бы на node-webkit сделать, как тот же Slack.
Или там на JavaFX или каком-нибудь WPF. А c нативным кодом все равно что у ноды, что у джавы что у дотнета интеграция есть.
>более-менее функционирующий abi - например, mfc
Бляяяя, держите ебанутого, я его придушу. В мире нет НИЧЕГО, блядь, хуже мфц. Даже червь-пидор и тот тихо посасывает в сторонке.
>нету в крестах стандартного abi, как следствие нету возможности полноценной динамической загрузки кода (а приходится делать си-совместимую) все это приводит к тому что чуть ли не треть кода - просто тупо код обвязок
Вообще не так.
Отсутствие стандартного ABI приводит к тому, что
1. В линуксе приходится собирать пакеты под системный компилятор.
2. В винде проприетарщину (если нужно закрыть код и распространять его как dll) собирают под 2-3 последние версии майкрософтовского компилятора.
И все. Никаких проблем.
А сишные обертки делают не для С++-кода, а для использования другими языками. Впрочем, и это не обязательно, так как есть SWIG (http://www.swig.org/Doc1.3/Library.html#Library_stl_cpp_library).
пытаюсь объяснить утыркам, почему кресты сосут - а именно нет стандартизированого abi, а значит всю их красоту (классы, перегрузку, шаблоны, исключения) хуй покидаешь за границы динамически загружаемого модуля (в си это механизм dll или so файлов если по простому)
>>610815
вот этот хуй, похоже вообще не понимает о чем речь
Это ты ньюфаг и нихуя не понимаешь. В шапке про тебя написано: "Хейтер сосет члены на пару со своей мамашей.".
А зачем 10 раз статически линковать какой-нибудь OpenCV? Он должен лежать в /usr/bin/libopencv_core.so. Но он врет. Единственное требование - совместимость версий ABI компилятора.
>/usr/bin
в смысле /usr/lib
http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html
Попробую здесь разобраться.
>com в винде и gtk в юникс системах
Вот ты сам всю суть описал. Нет кроссплатформенности - сразу теряешь 2/3 пользователей. Мне и с либами платформозависимыми ебли хватает, например.
>нету в крестах стандартного abi
Нет, все правильно, и я написал тебе в предыдущем посте, почему это фича, а не баг.
>охуенные объектные системы
Это, мягко говоря, спорное утверждение.
>как ты это говно пробросишь через границу dll
Никак, очевидно же. За всю работу с контейнерами отвечает своя дллка, общение с другими происходит через функции, которые находят элемент/формируют вектор результатов, и уже их передают, например. В нормальной архитектуре так делается, даже если по факту линковка статическая и ты можешь получить доступ к этим внутренностям. Расширяемость, тестируемость, все дела.
Да проще тебе ебало набить, няша. Я ему про Фому, а у него дядя в Кiеве.
Присутствие лучше отсутствия, так-то.
>>610747
>>610754
Двачую.
>>610759
Там емнип есть анальные ограничения, не? Что он должен быть POD или типа того.
>>610822
Ну так перекомпилируй дллки каждый раз при смене компилятора, ты так говоришь, как будто это каждый день происходит. Вообще, настоящая независимость от версии компилятора обычно нужна довольно редко, в каком-нибудь диком легаси, которому уже не помогут вкрапления stl, лол.
Да это не суть на самом деле. Статическая линковка от динамической в плане требований к ABI ничем не отличается - .o файлы от разных версий компиляторов С++ ты точно так же не сможешь слинковать статически, то же касается статических либ, то же и динамических.
То есть почитать ты можешь, но к обсуждаемому вопросу это отношения не имеет. Этот хуй почему-то думает, что код в .dll чем-то принципиально отличается от кода в другом .o файле, а это не так.
Ну нет, я с ним согласен, что проблема проявляется в основном только с dll. Потому что dll распространяют, а объектные файлы - почти никогда.
>Ну так перекомпилируй дллки каждый раз при смене компилятора, ты так говоришь, как будто это каждый день происходит.
Так я об этом и говорю. Я не понимаю, что мелкобуквенный несет вообще.
Бывает только одна проблема - когда проприетарная библиотека откомпилирована под древнюю версию компилятора, а автора давно не существует. Но я такое встречал только во времена C++ Builder 6.
как пробросить исключения через dll?
что делать с шаблонными функциями и перегружеными в dll?
просто подумайте, почему это нельзя сейчас делать общеизвестным методом (считай чтобы был стандарт на это)
и почему это хуево
в конце концов все упирается в то что нельзя на крестах сделать полноценную плагинную систему
на чистых сях - можно, на любой из объектных систем, запиленых на си-интерфейсах (com, gtk) - можно
а на крестах - нельзя
Никак. Эмулировать кодами ошибок. Не перегружать шаблонные функции в dll. Потому что это замедлит язык, а скорость приоритетна.
Еще вопросы?
Пункт 1 в FAQ:
>в крестах ты никогда не платишь за то, чего не используешь
Допустим, меня не ебут никакие dll, я просто хочу слинковать статически свою охуенно быструю софтину. Почему я должен получать замедление из-за того, что какой-то хуй захотел ПЛАГИН?
>простой вопрос: как пробросить класс через dll?
А как ты класс из соседнего .o файла берешь? Пиздец, что за тупой вопрос, #include <class_header.hpp>, и все.
Нельзя так, в этом вся суть. Если бинарные интерфейсы у компиляторов разные, то все сломается.
Объясни мне, каким образом я пользуюсь C++-интерфейсом OpenCV при условии, что он лежит в библиотеке? Может потому что это ты пробил дно своей тупизной?
Ты компилируешь ее вместе со своей программой, одним и тем же компилятором. Ну не тупи, анон, например, gcc делает у членов класса выравнивание условно, а clang - нет. Ты передал указатель и при попытке обратиться к члену получишь гроб кладбище.
помогите пожалуйста с кодом
http://pastebin.com/9D7MwptS
есть форма, где два элемента TextBox и один Button, мне нужно чтобы когда я вводу в TextBox1 массив чисел, после нажатия на Button в TextBox2 мне выводился преобразованный массив, в котором сначала идут элементы, которые больше или равны нулю, а затем отрицательные элементы, но мне на элемент TextBox2 выводится что-то странное, подскажите пожалуйста, как исправить
Если cmake скомпилирует тебе a.cpp и b.cpp разными компиляторами, а потом слинкует, то работать не будет, базарю.
Чтобы до тебя, хуиная голова, дошло, что речь идет не о том, как надо делать, а о том, что будет, если сделать, как не надо.
мимо помню как вы на 200 больших постов растянули срач об использовании дебагеров
ты линкуешься с ним статически потому что
в одном екзешнике можешь хоть на ушах стоять, крути что хочешь
разговор за то что кресты в крестах нет стандарта abi, а значит нет динамической подгрузки кода, а значит не сделать полноценную плагинную систему, например
>полноценную плагинную систему, например
Полноценная плагинная система поддерживает любой язык, и было бы странно, если бы clang и GHC имели бы что-то общее, помимо соглашений о вызовах функций (и обычно это не cdecl). А для внутренних дел достаточно использовать один компилятор.
Ну и позорище
>как ты это говно пробросишь через границу dll?
На текущем проекте ~300 dll файлов с с++ abi, ексепшонами, шаблонами, и динамической загрузкой отдельных модулей. Давай расскажи мне что оно не работает.
>на си были запилены охуенные объектные системы
>com в винде
Ясно-понятно, СОМ как предел местаний. Пару лет по работе использовал что-то похожее, говно-говном.
>>610857
>Там емнип есть анальные ограничения, не? Что он должен быть POD или типа того.
Да, кое-какие ограничения действительно есть. Наш эксперт внезапно обнаружил что есть способ прокинуть c++ abi между dll. День прошел не зря, не так ли?
>>610875
>>610951
Я хочу напомнить то в с++ можно линковатся с динамическим рантаймом. В этом случае stl будет в отдельной либе. такие дела. Хуле вы такие тупые, не стыдно?
>~300 dll файлов с с++ abi, ексепшонами, шаблонами, и динамической загрузкой отдельных модулей
и все это у вас компилится одной версией компилятора, под одну платформу
конечно, блядь у вас все работает, но речь то в треде совсем не об этом
>и все это у вас компилится одной версией компилятора, под одну платформу
А зачем использовать разные компиляторы, скажи мне? Какая-то надуманная проблема. Большинство либ идет в комплекте с Cmake, сгенерить make-файлы под нужный компиль не проблема.
>конечно, блядь у вас все работает, но речь то в треде совсем не об этом
То-то для половины треда это настоящее откровение.
> Ясно-понятно, СОМ как предел местаний. Пару лет по работе использовал что-то похожее, говно-говном.
COM на Винде / Gtk в Линуксе / NSObject на Маке - отличная архитектура для системы, лишенной сборщика мусора. Единственное говнокодство в COM это использование GUID'ов вместо строковых имен.
Вот что интересно. В винде и маке COM и NSObject вшиты в систему. Ты пишешь код и точно знаешь, что он запустится у конечного пользователя. А в линуксе либы gtk в системе присутствуют не обязательно. Более того, есть долбоёбы, которые принципиально не хотят ставить gtk, потому что любят кеды. Как итог, под линукс вообще нет смысла писать - зачем, если не на каждой копии этой говносистемы запустится твой код?
На си вариантов нет, Qt требует крестов.
Это одна из причин, почему эта система узкоспециализированная вундервафля для серверов и мамкиных технофашистов.
Подозреваю, что у тебя лютая хуйня вместо перевода строки из текстбокса в числа.
ToString() для массива выводит просто название типа. Тебе нужно или переопределить ToString() (тоесть свой класс создать) или выводить по числу, например сначала все в строку скинуть а потом уже на лейбл хуячить.
Есть же std::to_string, надо просто ее к каждому элементу применить, а не к самому массиву.
У твоего опенсорсного кода gtk будет записан в dependencies твоего пакета. Кто-то арчешкольник, которого ебет наличие gtk-либ на kde-шной системе - кто-то не поставит твой софт.А проприетарный код будет таскать все зависимости с собой, как на той же винде. У меня, например, есть матлаб под линукс, так это йоба-папка размером с гигабайт, в которой даже своя древняя java с собой положена.
>и все это у вас компилится одной версией компилятора, под одну платформу
Да, и еще и устанавливается в одну строчку, типа sudo apt-get install libopencv-dev. А ты думал. Собственно, я знаю, что ты думал. "самые охуенные проекты (и соответственно, чуваки которые их делали охуенны) - юзали, положим борландовский билдер, дак они писали собственные пакеты и компоненты, так же как и стандартные пакеты в билдере, а все сторонние библиотеки, что нужно было подключать + все winapi заворачивали в это, получался код единого стиля". 2015 год, билдер, winapi, компоненты.
Сначала вся логика, потом гуй. Вообще как ни странно, но гуй/веб-фронтенд для меня всегда сложнее и дольше писать, чем основной код.
Сначала пишешь libyoba и тестовое консольное приложение к нему. Потом допиливаешь консольное приложение. Потом добавляешь гуй. Вот так - >>611532 не делай ни в коем случае, так только дауны делают с циклом "исправил ошибку, нажал скомпилироваться, запустил и произвел 10 шаманских кликов мышкой, чтобы все протестировать". А цикл компиляция-отладка-тест должен быть по-максимуму автоматизирован. И только с уже отлаженным ядром можно думать о гуе.
Коданы, что православней указатели или ссылки? Сам ссылками редко пользуюсь, только при передаче параметров в функции и при перегрузке операторов = и ++. Смартпоинтеры не интересуют пока.
Это ОЧЕНЬ сильный срач, вообще, скорее, вопрос стиля и как принято писать в определенном проекте.
Ссылки - это просто синтаксический сахар над указателями.
1) Бери профайлер. Время выполнения через clock не будет точным т.к. измеряет не время выполнения, но разницу во времени, которая может меняться по разным причинам (например, ОС будет чуть больше отдавать времени другим процессам и т.п.)
2) http://www.cplusplus.com/reference/chrono/
std::..._ptr классы
Ты это сейчас вообще не тому человеку адресовал. У меня даже самописный калькулятор часто падает и зависает.
>вопрос стиля
Не всегда же. В прошлом или позапрошлом треде уже срались, и я пояснял, как использование ссылок улучшает безопасность передачи аргументов, но ухудшает понимание того, что они мутабельны.
фигня
ну хочешь что поставить емакс на kde-based de, ну притащить он с собой несколько gtk зависимостей, ну и че?
всегда это можно будет удалить, если надо с помощью системы управления пакетами..
>А зачем использовать разные компиляторы
а как по твоему разпространяются бинарные пакеты с закрытыми патентами алгоритмами? это просто dll или so из которой торчит сишный интерфейс
или com-библиотека, из которой торчит объектный интерфейс
и никого не ебет какой версией компилятора и вообще каким компилятором она сделана, и подключить ее можно к проекту на любом помпиляторе, и даже более того, подключить вообще к любому языку, поддерживающему ffi
блядь, это ебанутый тред
я пишу очевидные вещи, просто очевидные, это как то что хлеб - еда, а кисель - напиток
при этом меня кроют хуями
Это сервер. Рендере проигрывает музыку с этого сервера.
Тебе и было сказано, что в разработке такие "универсальные дллки" это довольно редкий случай, обычно ты ну максимум манкипатчишь собственные старые в уже развернутом приложении. А полноценный проброс классов нужен и того реже, поэтому решено было этим пожертвовать в угоду скорости.
>закрытыми патентами алгоритмами
А это вообще пушка, с учетом того, что в каждом опубликованном патенте всегда есть полное описание алгоритма.
Оно. Если не знаком с WinApi, то не берись. На C# это делается быстрее.
boost::filesystem
Я с Шилдта начинал. Свежесть не так и важна, если только начинаешь программировать. Вон те же сишники, все еще K&R читают, а ей сколько лет уже! Тебе главное понять принципы, что да как работает. А потом, как наберешься опыта и будешь без проблем (и гугла) решать простые задачи, переходи на Страуструпа, или уже на черновик стандарта.
Язык программирования - это лишь два слова, которые ничего не значат сами по себе. Значение им придает стандарт, в котором описываться что это значит и как это должно работать. Стандарты принимаются специальными комитетами, которые отвечают за дальнейшее развитие языка. А по этому стандарту пишут компиляторы, которые являются реализациями какого-либо языка. Есть множество различных компиляторов, каждый из которых в чем-то отличается от другого. Ведь каждый может интерпретировать написанное по разному. Но тебе со стандартами С++ стоит ознакомится только тогда, когда ты уже будешь более-менее технически образован, чтобы понять что там написано. Ну и нормальное знание английского, так как ты вряд ли найдешь перевод.
А вот кстати что потом то читать? Ну вот прочитал я книгу для нубов, научился выводить хелоу ворлд в консольку, а дальше куда? Что читать, что писать? Я думал Саттер с его задачами подойдет, но оказалось там пока для меня пиздец. Теперь сижу и не знаю за что хвататься и куда смотреть.
Изучи STL для начала. Затем учись пользоваться какими-нибудь API. А вообще, если ты не знаешь зачем тебе это - это тебе не нужно.
с++ слишком огромный чтобы его изучить весь. Что тебя привлекает, гейдев? Выбери интересную задачу, может просто посмотри на всяких апворках, даже неберясь за нее просто попробуй сам сделать. Почитай как такие задачи решают профессионалы.
Параллельно читай основные приемы, как писать классы, какие библиотеки для твоей задачи уже написаны, как ими пользоваться. А то ты так будешь вкатываться лет 5 лол. И на тот момент уже все что ты прочитал устарело. А текущему работодателю нахуй твой набор библиотек не нужен.
Он несравнимо меньше, чем какая-нибудь модная параша с сотнями фреймворков. Без проблем можно изучить процентов на 70 и иметь неплохое представление об оставшихся 30.
А что изучать в голых плюсах без, простигосподи, STL?
Сам язык легко осваивается за неделю-другую.
Потом начинаешь изучать библиотеки (разумеется, в рамках каких-то задач).
А потом, много позже, приходит понимание.
Если вопрос в том, что точно изучать, отвечаю - базовый синтаксис, STL. Понять что такое boost. Дальше - по желанию.
Написать зэловорд на очередном шаблонном фреймворке и почти узнать его - это, блять, не стл с бустом выучить.
Ну, возможно, что у меня ошибка выжившего, но мне на фоне сотен говнотехнологий, которые непременно требуются на тех же жабовакансиях, stl с бустом показались на порядок однороднее и проще в освоении.
Двачую этого.
>базовый синтаксис, STL
В принципе согласен с тобой. Но ведь есть задачи, где stl вообще не нужен? Может ему понравится делать на Qt игры для андроида. Знать нужно, но там порог вхождения настолько низкий, что можно начинать прямо сейчас, без смс, а все остальное изучать в процессе работы.
Потом надо что-то писать и читать Майерса.
>как работают эти языки "изнутри"
Assembler.
Disassembler.
Debugger.
Лучше самому один раз попробовать, чем сто раз об этом прочитать.
Возьми откомпилируй функцию с ссылкой в качестве аргумента и попробуй дизассемблируй полученный файл. Или там в дебаггере по шагам смотри что там куда происходит.
Потом с указателем. С классом. Структурой. Я так по всем типам прошелся в свое время.
У меня сейчас есть:
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
Так или иначе, я далеко продвинулся, влез очень глубоко, разобрался во всей структуре диска и внутренних файлах, а также полностью освоил внутренний скриптинг локаций и битв.
Проблема в том, что многие вещи приходится реализовывать через жопу вместо аккуратных правок исходников.
Я слишком слаб в той сфере, до которой пытаюсь докопаться. Вот, допустим, мне нужно поменять определенную зависимость в расчётах, которая возникает при считывании определенного байта. Я ставлю брейкпоинт на чтение этого байта из памяти, а что дальше? Ну, я вижу ассемблерный код, я понимаю каждую строчку по отдельности, но в общем и целом нихуя не понимаю, что же он делает. Какая-нибудь небольшая функция может состоять из тысяч операций.
У меня ощущение, что люди с опытом мгновенно видят различные паттерны и шаблоны, когда смотрят на ассемблерный код, но я читаю его строчку за строчкой, так что общую картину не вижу. Ну считалась переменную, на произвелось три тысячи операций над регистрами, ну и что? Как мне понять, что нужная мне функция закончилась и дальше идет уже совершенно другой расчёт? Может, я уже читаю код рендера, а не логики, но не знаю об этом.
Поддвачну.
std::vector< std::pair<int, int> > v1(size), v2(size);
\t\ts1.swap(v1);
\t\ts2.swap(v2);
не компилируется.
Если я их объявлю, у меня все компилируется. Но тогда это 4 std::pair, а не два, как ты говоришь. Может ты что-то путаешь?
Нужно создать два стека std::pair фиксированного размера. Как это можно сделать?
>Динамическое выделение памяти
Но ты ведь уже выделил память.
>v1(size)
>работает слишком медленно
Обрабатываешь миллиарды элементов в секунду?
>Обрабатываешь миллиарды элементов в секунду?
Да, поэтому стек должен быть постоянного размера. Известно максимальное количество элементов, которые могут храниться в стеке.
Бамп.
Наверни Inside the C++ object model Липпмана, правда, она на ангельском и старая, но там годно поясняется.
Пиздец, какие же здесь сидят аутисты, я просто поражаюсь. Один становится топ 3 директх программистом в России, прочитав книжку. Другой получает задачу, которую решит 8 классник на собеседовании(!!), так он ещё и пишет какой-то шизофренический код с рандомными отступами, на который без слёз посмотреть нельзя.
>убрать пробелы из КОНЦА
На строке "ss ss" твоё говно как отработает?
Ты ещё и \0 записываешь в предпоследний индекс, а не последний. Забей, программирование не твоё.
/rank
Бамп.
Есть ли области работы с молотком, где не требуются слесарные навыки и строительное образование?
Linux kernel
Формошлепство на Qt.
Скорее
>Есть ли области работы с молотком, где не требуется езда на одноколёсном велосипеде, с одновременным жонглированием десятью урановыми молотками?
Успокаивай себя.
[code lang="cpp"]
void trimRight (const char str) {find_if (make_reverse_iterator (str+strlen(str)), make_reverse_iterator (str), [] (char cur) {return cur!=' '))++ = '\0';}
[/code]
В ответ на нормальный рекурсивный алгоритм, подгоревшая байтомартышка высрала нечитабельное говно на ворохе костылей, ещё и в одну строку запихала, ну лол же.
str.take(str.lastIndexWhere(_ != ' ') + 1)
А сейчас тебя вообще порвёт: str.trim
Пришел тралить, а что написано не понимаешь. Причем тут массив? Нужно убрать пробелы в конце строки, не зная ее длину, а зная только указатель на начало.
>Функция должна быть написана в расчёте на работу с очень длинными строками с очень большим количеством пробелов, оптимизирована по количеству обращений к памяти
>рекурсивный алгоритм
Давай, расскажи, что у тебя стек больше, чем срака твоей мамаши. Кококок хваставая рикурсия конпелятор разбирется.
>Стэнли Липпман, Жози Лажойе и Барбара Му - Язык программирования C++ (2014)
В нем задачки есть или онли поясняют за синтаксис и всю хуйню? Вроде полистал - ненашел нихуя.
Какую студию скачивать?
Вообще-то явное использование рекурсии (вместо комбинаторов) - это дно функционального программирования. Впрочем, что еще ожидать от школьника, выучившего скалу и решившего впечатлить мир этим знанием.
А если поковыряться с llvm и clang? А то ассемблер/дизассемлер меня не очень радует. В дебаггере же просто адреса памяти и что они хранят, но тут я возможно чего-то не знаю.
while(true)
Цикл for (initialization; loh; ++pidr) состоит из трёх частей, разделяемых между собой двумя ;
Любая из трёх частей может быть опущена (в т.ч. любые две из трёх или все три), но обе ; должны обязательно наличествовать, чтобы компилятор понял, что к чему относится.
Ты сам-то проверял свой высер? У тебя там даже количество скобок не совпадает.
>char*
>strlen
Двойной проход от начала к концу и и от конца к последнему символу. Можно быстрее. Думайте, кандидат, думайте лучше!
что можно на вашем си плюс плюс написать, помимо игор?
Все?
А, ну да, ты же обнуляешь каждый раз, когда не пробел, я не заметил. Пардон.
Но все равно твой вариант нихуя не оптимален. Получается сложность O(длина строки), а можно сделать O(количество пробелов в конце). Вот исправленный высер, например:
http://ideone.com/DpE8tK
strlen обычно инлайнится и будет с оптимизациями O(1) для захардкоженных строк. Так что это спорный вопрос.
>будет с оптимизациями O(1) для захардкоженных строк. Так что это спорный вопрос.
Я б тебе ПЕРЕЗВОНИЛ
помогите пожалуйста, как исправить код, чтобы программа заработала?
>llvm
Да, будет лучше. Хотел про него написать, на название забыл. Сам не пользуюсь но наслышан что штука крайне полезная.
Убрать из кода весь WinAPI.
Этот код для C++ Builder и использует библиотеку VCL. Положи там, где взял.
"Alex Gregan" <al.grehan@gmail.com> , "Mirana, Griffith" <dgh@gmail.com>, Вася Пупкин <vasyan@gmail.com>
Проблема в сплите по запятой в том, что иногда бывают имена получателей с запятой, как я написал выше. Может кто подбросит регулярку нужную?
Хотя нет, показалось. Это C++/CLI код. Но все равно, положи там, где взял.
Step-1: File-> New -> Projects -> Templates -> visual C++ -> CLR ->Win32 Console Application -> Ok ->Finish
step-2: RightClick on Source Files -> Add new Items -> Visual C++ -> UI -> Windows Forms (MyForm.h) -> add
Step-3: Click on properties in top-right corner (or) Execute. Done!
я не понимаю, где Properties
Попробуй скобочки добавить после MyForm
window.view.zoom для этой задачи не подходит, т.к. он ресайзит всё, что находится на экране. RenderTextureы, в которых хранятся эти самые слои, не хотят поддаваться zoom - просто ничего не происходит. Есть ли решение?
Да, это я видел. И либо я спать хочу, либо просто туплю, но не понимаю, как мне потом координаты к единой системе приводить. Каждый раз по клику переключать view затратно.
Вообще, изначально я думал, что всё, что можно применять к RenderWindow, можно и к RenderTexture. Т.е. я взял бы, перемасштабировал текстуру, вывел бы её на экран и при необходимости встроенным методом pix_to_coords, или как там, получал бы какие мне нужно координаты. Но view, фактически, просто на время изменяет масштаб моего окна, а на текстуре это никак не отображается, так что не зная, масштабированная ли в области клика текстура или нет, я ничего толком сделать не могу. Надеюсь, суть я донёс, а то уже сам забыл, что хотел написать. Надо спать идти.
По указателю. Как деды еще делали.
Например, можно возвращать пару или кортеж, где первый элемент технический - ошибка.
Потом, их можно будет легко разделить с помощью std::tie.
Так или иначе ты должен определить один тип возвращаемого объекта, который инкапсулирует и ошибку и возвращаемые данные. Так будет type-safe.
И кстати,
>годно, красиво, просто и круто
противоречит
>в духе Design Patterns
Очевидная Either монадка
boost::variant<T, Error>
>Исключения, передача дополнительной переменной и прочие ужасные решения подобного рода не интересуют
>implying исключения это плохо
ты говноед
Это так и делается, на самом деле. Ничего затратного в этом нет, обычные афинные преобразования, на производительность едва ли влияют, хоть 100 слоев двигай.
Как хочешь, в общем.
Условие читай. Передается char*
Можешь пояснить?
>>614183
Пока не придумал другого решения, буду пользоваться этим. Хотя может и правда, так и нужно делать.
>>614184
Ну взять ту же самую миникарту. Допустим у нас есть 2 RenderTexture, в которых лежит полноразмерный оригинал карты. Одну мы просто выводим на экран, а вторую зумим через view.zoom и тоже выводим, где-нибудь в углу.
Теперь, по щелчку пытаемся определить координаты внутри каждой RenderTexture с учётом зума. Для этого нам нужно просто вызвать внутренние методы pix_to_cords, ну или что-то вроде того.
Но это всё в теории.
На практике, судя по всему, придётся делать по другому, потому что RenderTexture не умеее в view.
Берём нашу текстуру карты, меняем view окна, рисуем миникарту, меняем view обратно, рисуем полноразмерную карту. Теперь, для определения координат внутри миникарьы получаем координаты клика, снова меняем view на миникарту, приводим коорлинаты методом и меняем view обратно.
Как то так.
БЬЕРННАКАЖЭТ!!!!111
Привет, программач. Дело в том, что мне нужно сделать класс матрицы. Понятное дело, я делаю его через шаблоны, потому что матрицы могут быть 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));
Если ты делаешь шаблонные матрицы, что тебе мешает сделать шаблонные функции поворота и перемещения? А для твоего говноедского решения есть static_assert.
Поворот и перемещение нельзя сделать для матриц, отличных от 4x4. Почему решение говноедское?
static_assert - это рантайм. Мне бы хотелось во время компиляции указать на все ошибки.
>static_assert - это рантайм
Нет. assert это рантайм, static как раз указывает на compile-time.
>Поворот и перемещение нельзя сделать для матриц, отличных от 4x4
Я, возможно, не совсем понимаю, что ты имеешь в виду под поворотом. Транспонирование матрицы? Поворот вектора оператором, определенным матрицей? В обоих случаях привязки к размеру нет. Запили на псевдокоде, что ты имеешь в виду.
Наверное, чтобы не выделять память динамически.
Поворот и прочие преобразования можно делать в любой размерности, ёба
Делай лучше vector3 и Matrix4 и не сношай мозг
Слишком жирно выделять целый класс для 4x4.
>>614268
Чтобы можно было сделать матрицу из многочленов, например.
>>614265
Если есть класс Matrix, то логичнее было бы определить всё в нём, вместо того, чтобы создавать 74654689 классов для частных случаев.
>>614291
Ладно, тогда как сделать, чтобы метод setToIdentity не работал для неквадратных матриц?
>>614263
За это спасибо, попробую. Да, я имею ввиду транспонирование матрицы. Да и вообще все операции, как написано тут: https://open.gl/transformations
Ну так транспонирование определено для любых матриц, а не только для квадратных. Тебе надо сделать метод, который не меняет саму матрицу, а возвращает новую, вообще говоря, другой размерности. Это будет правильное и однородное решение, в отличие от.
[code lang="cpp"]
template <typename T, size_t W, size_t H>
class Matrix
{
\t//...
\tT data_ [WH];
\t//...
public:
\t//...
\tMatrix <T, H, W> transposeMe () const
\t{
\t\tMatrix <T, H, W> output;
\t\tfor (size_t hctr = 0; hctr < H; ++hctr)
\t\t\tfor (size_t wctr = 0; wctr < W; ++wctr)
\t\t\t\toutput.data_ [wctrH+hctr] = data_ [hctr*W+wctr];
\t\treturn output;
\t}
\t//...
}
[/code]
> вместо того, чтобы создавать 74654689 классов
Классы у тебя создатутся в любом случае (просто по шаблону). То что ты хочешь сделать не совсем моответсвует идеологии, шаблоны изначально предназначаються для того чтобы использовать один и тот же код для разных типов (хотя они уже далеко ушли от этого). Если тебе нужно разное поведение (один тип может что-то делать, другой нет) то идеологически правильно использовать наследование (ну или агрегацию и т.д.). Например, от общего класса матрицы наследуешь квадратную матрицу, которой для надежности даешь конструктор который принимает один аргумент (размерность) и там внутри вызывает конструктор базового с двумя одинаковыми аргументами. Потом переопределяешь или добавляешь нужные методы. Пытаясь на шаблонах придать разное поведение ты не выигрываешь в количестве кода - тебе все равно нужно прописать все отличное поведение. Реальный выигрышь нулевой, только больше пердолинга и высраных кирпичей при ошибках компилятора. Но сделать на шаблонах конечно можно, например https://ideone.com/6J6hwE - компилируется с закоментированой 26 строкой, если ее раскоментировать будет ошибка компиляции. Если интересует такой пердолинг читай книгу Александреску. Кстати в 17 стандарте вроде хотят расширить функционал шаблонов в подобном направлении.
Структурноблядок подорвался. Иди глобальных переменных посоздавай, глобальные переменные сами себя не создадут.
Т.е. по-твоему по-другому не бывает? Или даунское ООП уровня 80-х годов, или не менее даунский код а-ля фортран?
>>Использовать я буду в основном матрицы 4х4.
>Слишком жирно выделять целый класс для 4x4.
схуябы?
учитывая фиксированные размеры можно хуячить оптимизации уровня mmx/sse/sse2 а то и выше
>Чтобы можно было сделать матрицу из многочленов, например.
тебе это нужно вообще в данной задаче?
>как сделать, чтобы метод setToIdentity не работал для неквадратных матриц?
std::enable_if
Хотя, можно сделать так http://ideone.com/mzRNf5 . Если ты об этом, то ок. А вот виртуальные методы - зло.
Не согласен, ибо замедления это не дает, а структуру может улучшить. Вот виртуальность да, часто бывает вредна из-за оверхеда, но и в математических либах ее можно воткнуть в некритичные места без особого замедления.
Хочу навернуть во время праздников в тишине и спокойствии. Кто читал? Годно ли, стоит того?
Не, я все равно прочитаю, но что ли подзадорьте
Yep.
Спасибо. Пока ещё слабо представляю, как мне эти навыки пригодятся, учитывая что конторы пишут на шинапи с 98 стандартом и пока переходить не думают.
> Эта хитрая жопа сказала что автомат мой
Ты бы лучше ткнул его носом в то, что слово своё он не держит и вообще лжец.
Выложи код на паскале, я прокомментирую аналоги в С++. Должно быть несложно.
Карочи, эта программа нужна для того, чтобы подсчитывать единички в двоичном представлении числа.
Как сделать так, чтобы они подсчитывались только с 5 по 10 бит включительно?
Поделить входное число на 16, потом взять остаток от деления на 128.
Нужно сделать побитовое and с двоичным числом типа 00001111100000. Только двоичные числа не поддерживаются, поэтому переведи его в шестандцатиричное и напиши n &= n 0xвотэтовотчисло, перед циклом.
А почему не 00001111110000? Пятый бит же тоже включительно.
А так вообще спасибки. Долго ебался, пытаясь сделать and с этим числом в двоичном и десятичном виде, и ещё удивлялся своему фейлу. Теперь всё работает.
Зависит от того, как ты считаешь биты - первый бит у тебя первый, или все-таки нулевой. Поэтому я даже не пытался считать нолики и единички у себя - это твое дело.
Нет, я всё-таки перепутал. Не транспонирование, а поворот. Ну как на том сайте написано жи! Транспонирование у меня определено для всех матриц.
>>614626
1 - Если бы я использовал только матрицы 4x4, то я бы сделал класс для матриц 4x4, но я буду использовать не только их. Я их буду использовать просто чаще других. Алсо, оптимизация без надобности - это не совсем правильно.
2 - Да, я студент-математик. Мне нужно составлять матрицы из комплексных элементов и многочленов.
3 - Вот за это спасибо. Теперь надо выбрать между static_assert и enable_if. Помню, треда 3-4 назад здесь собрались ёбнутые фанатики со своим SFINAE. Это же как-то относится к моей проблеме? Как к ним примкнуть?
С наследованием интересно. Но всё же хотелось бы без него. Насколько корректно решать эту задачу с помощью std::enable_if или что-то в этом роде?
Да плевать мне на половую принадлежность человека, Катя она, Алёна или Жирослав, лишь бы не void main()
http://pastebin.com/zAtUdU1p
Есть поток для ввода чисел, которые складываются в многопоточную очередь, откуда берутся и выводятся потоками из пула.
После выполнения что-то не ладится с синхронизацией или типа того.
terminate called after throwing an instance of 'std::bad_function_call'
what(): bad_function_call
zsh: abort (core dumped) ./test
Сама реализация пула взята из
http://stackoverflow.com/questions/26516683/reusing-thread-in-loop-c
Где ж я обосрался?
Ну толсто же. Во-первых, я ему подсказал, как правильнее решить проблему без проверок вообще, а не какой из способов применить для костыльного решения. Во-вторых, концепты это кусок семнадцатого стандарта, их еще нет официально, и применять их в продакшене сейчас - дурной тон. В третьих, его задача гораздо проще и короче решается одним static_assert (4 == H && 4 == W), концепты ввели для более сложных случаев типа сравнения сигнатур, и писать там потребуется побольше.
enable_if напрямую не решит твою проблему, это чисто утилита для SFINAE. Для static_assert тебе просто придется написать условие, как вот здесь: >>615031 , если оно не выполнится, то компиляция прервется. В enable_if от условия зависит только наличие typedef'а внутри структуры, т.е. тебе придется городить хуйню из наследования и тому подобного.
Поворот делается почти так же, как в коде для транспонирования, тебе просто, в зависимости от угла поворота, нужно пустить один или оба индекса в обратном направлении. Нарисуй эту хуйню и сразу разберешься, тыжматематик.
Если класс небольшой и используется только главным классом из того же файла, то нормально. Например, какой-нибудь класс ячейки контейнера в файле с классом контейнера.
Ну я посмотрю еще, просто на первый взгляд мне неплохо показалось.
Купи ардуину, установи Arduino IDE. Там писать надо на крестах, вот и пили всякое разное.
Первое, очевидно. Во втором случае будет всегда передаваться лишняя инфа, ибо тебе нужна либо ошибка, либо значение - что-то одно. variant же как раз умеет не хранить лишней хуйни.
А если я хочу, чтобы этой функции вообще не было? То есть для матрицы 4x4 она есть, а для матрицы 4x3 уже нет. Она просто отрезается из кода. Это же SFINAE?
Насчёт поворотов - какие индексы? Ты знаешь, что такое матрица поворота? Это не просто взять и повернуть элементы матрицы. Это совсем другое.
>enable_if напрямую не решит твою проблему
template<int N, int M>
std::enable_if<N==M, Matrix<N, M> > Matrix<N,M>::setIdentity()
{ блаблабла }
Где код MyQueue?
Если там нет блокировки для всех методов а так оно и есть, прозреваю, тут io_mutex определен, но не используется, то ты сосешь с синхронизацией.
Алсо, код какой-то пиздецовый, пул вообще не используется, числа выводятся основным потоком. Лучше прекрати блуждать в потемках и наверни Уильямса, как анон выше сделал.
Потому что он будет работать для любых матриц, а не только для 4х4, очевидно же.
Нет, ее и так не будет, без SFINAE это вообще другая совсем тема. Твой класс шаблонный, следовательно, пока ты не обратился к функции, она не сгенерируется. А когда обратишься, она попытается сгенерироваться, и сработает static_assert.
Я знаю, что такое матрица поворота это было моим вторым предположением >>614263 здесь. Но тогда я не понимаю, какое действие ты хочешь совершить с самой матрицей-то? Просто умножить на вектор и вернуть новый вектор, не изменяя матрицу? Тогда это определено для всех квадратных матриц, а не только для 4x4. Я бы на твоем месте выделил класс SquareMatrix, унаследованный от Matrix, и все операции, определенные только на квадратных матрицах, вынес в него. А остальные - оставил в Matrix. Это вполне логичное разделение, ибо свойства квадратных матриц довольно сильно отличаются от общих есть определитель, можно сделать проверку на унитарность, ну ты понел. Так ты сможешь, читая код, сразу увидеть, что в данном месте требуется именно квадратная матрица, а не разбираться с ошибками компиляции, когда сунешь не то.
Не очень хорошо, ты получишь десять страниц ошибок, когда оно не скомпилируется. А в static_assert можно самому задать строку, которая выведется при ошибке.
А если мне вдруг понадобятся какие-то свойства матриц с соотношением сторон 9:14, то мне и для них новый класс создавать? Нет, хочу всё в 1 сделать. SFINAE жи есть, почему бы не использовать его?
Каких 10 страниц? Там будет около 20 строчек, и в 1 из них будет искомая ошибка. Если ты работаешь через IDE, то вообще без проблем её сдетектить.
Да используй что хочешь, няша, хоть макросы. Ему показывают good practices, а он нос воротит, лол. Я тебе пояснил за преимущества static_assert, дальше выбор за тобой.
Классы на каждый чих создавать глупо, но в конкретном случае слишком много уникальных для квадратных матриц свойств, так что они вполне заслуживают отдельного класса. И так будет легче писать и читать код, он быстрее скомпилируется, хуле тебе еще надо-то?
>двач, как чистить сортир вилкой? слышал, пару тредов назад тут были адепты вилок, это как-то относится к моей проблеме? как к ним примкнуть?
>на тебе щетку, щеткой чистить заебись. чисти говно!
>неееет, я хочу вилкой, поясните за вилку!
>вилкой чистить неудобно, каждое движение зацепляет мало говна, будешь чистить долго
>да какое там долго, будет около 20 часов всего! если начальник даст большую вилку, то вообще без проблем все почистить
Какой смысл делать это методом, если результат не зависит от самой матрицы, только от размерности. Сделай глобальную функцию, которой передаешь размер, и она создает единичную.
Нет, мы же уже порешали что не нужно плодить 57334534 классов, когда можно сделать всё в 1.
Охуительные советы итт. Ты же понимаешь, что генерировать единичную матрицу и копировать её в нужную - это медленнее, чем сразу делать нужную матрицу единичной?
Аноны, шапка, конечно намекает
Но можно ли джуну найти вакансии на крестах или лучше идти в другой сиподобный язык и только потом возвращаться на кресты?
Кресты нужны для гейдева, ибо лучший язык
А сил и средств реализовывать проект пока нету.
Идти и учить другое, параллельно уча кресты?
Я сказал, почему медленнее. Теперь ты говори, почему не медленнее.
>Я сказал, почему медленнее.
Нет, не сказал, только кукарекаешь из лужи мочи. Вот когда предоставишь доказательства, что это работает как минимум в 2 раза медленее, тогда и кукарекай.
>Вот когда предоставишь доказательства, что это работает как минимум в 2 раза медленее
Тепеь "медленнее" начинается только с "в 2 раза медленнее"?
У меня такое впечатление, что я разговариваю с зеленью, обожающей сказку про белого бычка.
>>615061 - сообщения об ошибке больше и менее читаемые
>>615053 - нужно написать в 2-3 раза больше кода
>>615080
>>615090
Пикрелейтед. Вот этот >>615086 анон абсолютно прав, в эпоху move semantics просто стыдно что-то бормотать про медленность перемещений.
Пикчу забыл.
Стыдно - это пошёл ты нахуй. Перемещения медленные. Пока не докажешь обратное - ты пидор и я ебу тебя в жопу.
Вот именно, всё что ниже - хуйня на уровне статистической погрешности, и этим должен заниматься компилятор.
Тогда преимущество достигается только для стековых объектов, а их перемещать нехуй. Не могу себе представить ситуацию, в которой быстрее превратить матрицу в единичную, чем удалить старую с тривиальным-то деструктором и создать единичную уже новую.
Там как раз есть блокировка для всех методов, это мьютекс на вывод в консольку.
И почему пул не используется?
> pool.doJob (std::bind (calculate, el));
Да, я не заметил просто. Энивей, как-то странно у тебя все построено, у тебя, по сути, главный поток является диспетчером для всего, и это будет узким местом для больших данных. Обычно делают метод, который дергает очередь, создают пул потоков, которые все инициализированы сразу этим методом с параметром-очередью, а они уже независимо дергают очередь и смотрят, есть ли там что-то. Короче говоря, примерно как у тебя для чтения сделать и для вывода.
Я не особо обмазывался этой хуйней, но мне кажется, что это актуально только для узкоспециализированной хуйни вроде электросхем и тех же квантовых вычислений. С нормальной пекарней ты всегда получишь замедление, ибо много лишнего будет пересчитываться при каждом изменении.
В boost треды практически идентичны стандартным. QThread же сильно отличается от них по интерфейсу (бустовые и стандартные минималистичны, а он набит овер 20 методами), плюс сильно заточен под реалии куте (сигналы и слоты). Я бы не использовал QThread вне приложений, которые уже насквозь пропитаны Qt. Такие дела.
10/10
У Касперски есть неплохая книжка, старенькая довольно, но основы разжеваны годно. Гугли "Касперски, Рокко - Искусство дизассемблирования". Если вообще не шаришь в ассемблере, наверни какого-нибудь Юрова перед ней.
>Если вообще не шаришь в ассемблере
Что подразумевается под этим? Я без референса понимаю каждую инструкцию, привык к branch delay slot'ам, но мои глаза не видят паттернов на лету. Из-за этого я очень медленно читаю код.
Тогда можно сразу читать. Там как раз почти половина книги посвящена детектированию конструкций, которые генерятся высокоуровневыми языками.
Отклеилось.
Cпасибо, братишка.
Ну, оно безусловно прыгнет на адрес из регистра. В регистре может быть что угодно, в.т.ч. следующая после jr команда.
Ну, там какой-то очень далёкий адрес, а значит, видимо, откуда-то должен быть переход на область, следующую после jr.
А ты уверен, что этот адрес там безусловно? Возможно, при другой истории выполнения там будет он. Ну или просто это мусор, оставшийся после изменения кода. Маловероятно, что туда идет переход откуда-то еще, хотя чем черт не шутит.
>Маловероятно, что туда идет переход откуда-то еще
Как мне это определить? Выгружал код в ida, она автоматом никаких xref для этого участка не выдала, но я и не весь файл дизасмил.
Суть в том, что мне надо отследить этапа расчёта переменной. Но в процессе расчёта она хранится в разных местах на разных этапах. Вот я и пытаюсь понять, как я пришел в этот кусок кода.
Брейкпоинт на что? Вот смотри.
Я поставил брейкпоинт на запись значения по заданному адресу. Таким образом я попал в кусок кода, где это значения считывается из другого адреса перед тем как попасть в конечный. Я разобрал этот кусок, а потом поставил брейкпоинт на запись по тому адресу, откуда считалась переменная, чтоб понять, как расчитывалось её значение. Попал в следующий кусок кода, где происходит часть расчёта значения, а потом запись. Я разбирал код построчно, поднимаясь вверх, пока не дошёл до этого jr. Теперь я не знаю, откуда я попал в этот кусок кода.
Нет, я снова слепой мудак, это не то, что я искал. Где лучше задавать свои вопросы, касающиеся этого? Сомневаюсь, что с++ тред для этого подходит.
По-моему, тут где-то был неофициальный ассемблерный тред. Хотя, возможно, он уже утонул.
Хотел посмотреть, как работает данная дичь без std::ref то бишь убедиться, что она действительно просто создает локальную копию передаваемого объекта но фишка в том, что это говно вообще не скомпилилось, выдавая доселе невиданные ошибки.
ЧЯДНТ?
> -std=c++1y
Что за компилятор? Похоже что у тебя чего-то нет, вроде ругается на result_of<T>::type а его только в с++14 добавили. Для тредов отдельно подключал библиотеку? Может библиотека для 14 компилятора, а твой компилятор старее.
14 же, не суть. В данном случае 11 с головой.
>для тредов подключал
На пике же видно, -pthread, треды у меня нормально работают, не первая программа.
Тут с передачей по ссылке проблемы, если ее убрать - тогда все будет окич
Но суть-то в эксперименте, конструктор треда пренебрегает передачей по ссылке и тупо копирует объект. В данном случае нужно использовать raw ptr или std::ref. К сожалению, не удалось мне воспроизвести передачу по ссылке. Впрочем, хуй с ней.
с++1ё
Пишешь вырвиглазный код, в котором - прости уж великодушно - не хочется разбираться.
20ый
Ну извини , ну сразу же не становятся гуру .
Я здесь. Все будет в течение получаса.
Это копия, сохраненная 25 января 2016 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.