Задать вопрос
Ответы пользователя по тегу C++
  • Какую дорогу в GameDev лучше выбрать?

    TrueBers
    @TrueBers
    Гуглю за еду
    Да не слушай ты этот бред, который пишут: "То бросай, это бросай, вакансий нету, всё пропало!".
    Всё есть, если есть интерес.
    Учить не важно какой движок, они все используют одни и те же концепции, паттерны примерно одинаковые.

    Внезапно(!), но везде есть и текстуры, и спрайты, и шейдеры. И игровой цикл даже есть!
    Изучив один движок, и написав пару игрушек, потом сам поймёшь, когда стоит перейти на что-то более функциональное и удобное. Придёт осознание, каких фич не хватает, и в каких движках они есть, и т. п.

    А все эти анрилы и юнити только ключевыми словами, по сути, отличаются. Ну, и общий дизайн у них чуть более удобен в плане декомпозиции кода, грамотной архитектуры. Но, пока сам не дойдёшь до необходимости использовать эту декомпозицию, ничего особо не выиграешь, только запутаешься. При переходе достаточно будет ознакомиться с паттернами Gang of Four и всё станет ясно более-менее.

    ПС Знаю разработчиков Юнити, которые начинали геймдев с этого движка и в шоке от того, что кто-то программирует не мышкой. Азы оптимизации им просто недоступны, ибо они даже понятия не имеют о нижележащем уровне API. Они искренне удивляются, как это знать чистый OpenGL и писать всё самому, а разве так можно? Точно так же, кстати, удивляются многие кодеры на плюсах: "А зачем мне знать ассемблер? Я с ним не сталкиваюсь никогда..."

    ППС Вот ещё можно почитать чуть позже, самая крутая книга по геймдеву, которую я видел. Правда, она для тех, уже, кто нашёл в своих движках какие-то изъяны и ищет решения. Но и основы игрового цикла есть там, обработки ввода, множество примеров декомпозиции.

    А уж, если хочется просто изучить полезный скилл зарабатывания денег и как зомби рубить бабки, то тут, как описали выше, 2 варианта по сути: Unity (C#), Unreal (C++). По ним вакансий немерено.
    Ответ написан
    4 комментария
  • Boost или не Boost вот в чём вопрос?

    TrueBers
    @TrueBers
    Гуглю за еду
    Precompiled headers, же! И всё влёт собирается.
    Ну, или для совсем тяжёлых случаев, можно юзать Ниндзю.

    А писать однозначно на бусте.
    Ответ написан
    Комментировать
  • Можно ли поменять тип у Си++ с помощю (int)num?

    TrueBers
    @TrueBers
    Гуглю за еду
    Забудьте Си, если пишете на плюсах! Не нужно бульдога с носорогом смешивать. Это абсолютно разные языки, пусть даже выглядят очень похоже.

    Работать то оно будет, но совсем не безопасно.

    Почитайте про 4 вида кастов: static_cast, const_cast, dynamic_cast и reinterpre... и используйте только их (для начала, желательно, только первый из них).

    Слишком длинные и труднозапоминаемые операторы? А это сделано специально, чтобы мотивировать разработчика не использовать явные касты вообще. Си++ изначально задумывает гибкую работу с типами, предпочитая неявные преобразования и сводя к минимуму явные. Лучше лишний раз перегрузить функцию с нужным типом, и сделать проверки в реализации этой функции, чем давать пользователю возможность что-то сломать неверным кастом.
    Ответ написан
    Комментировать
  • Когда заголовок iostream заменяет другие заголовки, например, string?

    TrueBers
    @TrueBers
    Гуглю за еду
    Однозначно нужно подключать всё как положено. Совсем не факт, что какой-то другой компилятор будет у себя подключать где-то этот самый string.h. Точно так же может смениться реализация в другой версии, и всё поломается.

    По сути, работает оно по чистой случайности. Всегда подключайте необходимый заголовок. Проще всего смотреть на сайте C++ Reference. Там для каждого класса есть вверху строка Defined in header <...>. Вот этот хедер и подключайте всегда, будет работать в 99% компиляторов. А чтобы не замедлялась скорость сборки, добавляйте часто используемые заголовки в precompiled header.
    Ответ написан
    Комментировать
  • Стоит ли использовать, как стартовое IDE для с++ code::blocks?

    TrueBers
    @TrueBers
    Гуглю за еду
    На самом деле, если есть знания, кодить можно где угодно. На прошлой работе, когда пришёл, рабочей машиной был одноядерный селерон 1.6ГГц, кодил в юниксовом терминале в vim'е. Отлаживал и анализировал коры в gdb. Купили новую машину, поставил гуй, продолжил кодить в vim.

    А для учёбы, отвечу так -- из лучших IDE для плюсов на данный момент:
    • Если нет ограничений в виде Win-only, крайне рекомендую связку Clion+clang. У Clion'а есть бесплатная лицензия для студентов. Clang поддерживает полностью C++14, и постоянно запиливают C++17. Плюсом будут всякие санитайзеры и прочие полезные штуки, которые приучают к безопасному коду. А ещё clang может похвастаться очень информативными и понятными сообщениями об ошибках компиляции, в отличие от той же Вижуал Студии, где надо быть шаманом, чтобы понять, что у тебя не верно. Это ой как облегчает обучение.
      Всё это для Линукса. Для винды clang пока не сильно фичастый, вместо него ставить Mingw. Который так же поддерживает C++14.
    • Для Win-only бесплатная Visual Studio 2015 Community RC + ReSharper 9.1, который так же имеет бесплатную лицензию для студентов.


    Описанный выше QtCreator не рекомендую, только если не собираетесь учить сам Qt. Функций чуть больше, чем в блокноте, а падает и глючит с завидной регулярностью.
    Ответ написан
    Комментировать
  • Как правильно написать MutexLocker?

    TrueBers
    @TrueBers
    Гуглю за еду
    А чем не угодил std::lock_guard?
    Ответ написан
  • Проблема с выполнением заинжекченого DLL?

    TrueBers
    @TrueBers
    Гуглю за еду
    Не знаю, что за бредовый код вы привели, но типичной ошибкой немедленной выгрузки DLL после загрузки является забывчивость брякнуть case-условие после выборки DLL_PROCESS_ATTACH или DLL_THREAD_ATTACH::
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
    	break;
    case DLL_THREAD_ATTACH:
    	break;
    case DLL_THREAD_DETACH:
    	break;
    case DLL_PROCESS_DETACH:
    	break;
    }
    Ответ написан
  • Что означает эта ошибка в С++ ?

    TrueBers
    @TrueBers
    Гуглю за еду
    this=optimized out, this=optimized out

    Есть возможность выключить -O и включить -g?
    Намного больше будет информации вместо optimized out.
    Ответ написан
    1 комментарий