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

    Nipheris
    @Nipheris Куратор тега C++
    Правильный путь: собрать deb-пакет и ставить его.
    Быстрый путь: на целевой машине попробуйте запустить sudo ldconfig.

    Таскать so-шник с бинарником не стоит. Если уж совсем туго, попробуйте слинковать статически.
    Ответ написан
  • Как подключить скачанную библиотеку?

    Nipheris
    @Nipheris Куратор тега C++
    Какая библиотека-то? Возможно в vcpkg есть, для Винды самый нормальный вариант.
    Ответ написан
    Комментировать
  • Что не даёт на C++ писать кроссплатформенные приложения?

    Nipheris
    @Nipheris Куратор тега C++
    • прикладное API различных операционных систем - разное. Если бы API было полностью одинаковое, то тогда операционные системы отличались бы только UX, набором софта и утилит, т.е. вместо Linux/Windows/BSD мы бы имели только Linux в разных дистрибуциях или только Windows в разных дистрибуциях. Ну т.е. по сути одну операционную систему, т.к. раз мы сейчас говорим о разработке прикладного софта, то нас интересует прежде всего API для прикладных приложений;
    • т.к. API различных ОС отличается, требуется создание уровней абстракции, которые нивелируют эти различия. В других ответах уже достаточно примеров, я бы вспомнил например о разделителях в именах файлов;
    • дополнительные уровни абстракции нередко сокращают доступное API, т.к. в большинстве случаев невозможно реализовать самому то, что нет в API какой-то из интересующих ОС. Следовательно, приходится оставлять только те интерфейсы, которые так или иначе есть везде;
    • т.к. абстрагированные интерфейсы из пред. пункта более аскетичны, ими сложнее пользоваться, они дают не все возможности, соотв. какие-то задачи уже нецелесообразно решать кроссплатформенным кодом на базе этих асбтрагированных интерфейсов, проще написать несколько вариантов для разных ОС;
    • оба предыдущих пункта - как достаточно успешные попытки сделать абстрагированные интерфейсы, так и наоборот, написание платформозависимого кода для каждой нужной платформы - удорожают разработку. Везёт только в случаях, когда абстрагированные интерфейсы уже есть и достаточно хорошо выполняют свою задачу, как например Asio. Или хорошие кроссплатформенные стандартые API вроде OpenGL, что делает возможным писать кроссплафторменные игры.
    • разработчику ПО не нужно удорожание разработки там, где это не принесёт ощутимой выгоды.
    Ответ написан
    Комментировать
  • Что нужно знать С++ разработчику для начала работы на фрилансе?

    Nipheris
    @Nipheris Куратор тега C++
    "База" в C++ никому за деньги не нужна, ну кроме американских и европейских студентов-лентяев, которые сами не хотят лабы делать. Если вы хотите заниматься C++ профессионально, ещё и фрилансить, вы должны понимать, как получить законченное решение по ТЗ. Это менее тривиально, чем на других платформах. Вот вам несколько вопросов для самопроверки, расскажете что знаете а что нет:
    • у вас есть большой объём текстовых данных (строк), каких простых правил будете придерживаться, чтобы избегать лишнего копирования содержимого строки;
    • я хочу написать некий фоновый сервис, вытягивающий данные из PostgreSQL и пишущий, допустим, в MongoDB, выполняющий некоторые простые преобразования (неважно какие). Пока будет крутиться на линуксе, но возможно и на виндах придётся запустить у другого заказчика. Какие на вскидку библиотеки для работы с БД будем использовать, будут ли сложности? Как их будем подключать к проекту?
    • чем будем собирать проект из предыдущего пункта?
    • что можете предложить для реализации сетевого обмена? Я хочу чтобы было можно в свой протокол поверх TCP, но возможно захочу ещё HTTP потом.
    • как будете выбирать, слинковать библиотеку статически или оставить зависимость от DLL/SO? Как будете собирать готовые пакеты для деплоя?
    Ответ написан
    7 комментариев
  • Коимпилятор ругается на инициализацю ссылки на функцию как написать что бы не было ошибки?

    Nipheris
    @Nipheris Куратор тега C++
    Вы не сможете сохранить указатель на функцию-член в переменной указателя на обычную функцию. Ваши варианты:
    - сделать dfLineFunc статической/свободной функцией (что было бы логично для функции активации, неужели она у вас от состояния зависит?);
    - сделать dfActive указателем на функцию-член и пользоваться им соответственно.
    Ответ написан
    Комментировать
  • Как реализовать класс стека на указателях и на массиве в одной программе?

    Nipheris
    @Nipheris Куратор тега C++
    Почитайте про полиморфизм вообще, и конкретно про его реализацию для классов в C++ в форме виртуальных функций.
    Ответ написан
    Комментировать
  • Как правильно кинуть исключение в конструкторе класса?

    Nipheris
    @Nipheris Куратор тега C++
    Но я начал читать и узнал про некий эомби-режим объекта, в котором произошел вызов данного exception.

    Не владею такой терминологией. Подробную цитату или ссылку на статью.

    Вероятно там будет о том, что выбрасывать исключение из конструктора можно, но осторожно. В основном все проблемы оттого, что если конструктор выбросил исключение, объект считается недособранным, и деструктор НЕ будет вызываться. Т.е. перед тем как бросить исключение в к-ре вы должны САМИ подчистить всё, что успели насоздавать: https://isocpp.org/wiki/faq/exceptions#selfcleanin...
    Ответ написан
  • OpenGL или DirectX?

    Nipheris
    @Nipheris Куратор тега C++
    Зависит от ваших текущих знаний и пожеланий, особенно от того, насколько вы готовы разбираться с каждой их технологий.

    OpenGL это кроссплатформенное API, раньше было не очень удобно начинать работу с ним на Винде, сейчас доступны различные библиотеки (GLEW, GLFW) и это больше не проблема.
    DirectX возможно даст вам больше возможностей, но там много заморочек с Windows-специфичными вещами, т.к. DirectX работает через технологию COM. Поначалу будет непривычно.

    Я бы на вашем месте начал с OpenGL и посматривал на Vulkan. Знание OpenGL полезно ещё тем, что проще будет использовать родственные API, например WebGL, если захотите писать внутрибраузерный код.
    Ответ написан
    Комментировать
  • Как создаются большие игры на c++ или c#?

    Nipheris
    @Nipheris Куратор тега C++
    1. Разработка крупных игровых проектов имеет как минимум те же особенности, что и разработка крупных приложений вообще. Раз вопрос о движках, не будем рассматривать прочие аспекты, такие как построение игровой модели, графический дизайн игры, написание сюжета и пр. Разработка движка, как большого проекта, требует:
    - умение поставить начальные технические условия, которые будут заложены в архитектуру проекта (чтобы потом не было очень больно это всё менять);
    - умение разбить движок на крупные подсистемы и выстроить между ними необходимые интерфейсы, чтобы каждую из подсистем отдать на разработку в отдельную команду;
    - умение получить MVP в разумные сроки и строить дальнейшую разработку итеративно.

    2. Как большой проект, связанный именно с компьютерной графикой, проект движка предполагает:
    - что немалая часть кода будет писаться с учётом архитектурных особенностей аппаратуры - например, если ваш движок будет пытаться передавать слишком много данных по шине на видеокарту (постоянно гонять геометрию/текстуры), то скорость шины быстро станет узким местом и никакое новейшее оборудование вам не поможет.
    - что графический код рано или поздно может потребовать мелких оптимизаций (вплоть до переписывания супернагруженных мест на ассемблере под каждую поддерживаемую аппаратную платформу);
    - что графический код сегодня требует серьезного понимая физики света и цветовосприятия.

    Для всех тех, кто понимает как реализовать вышеописанное, C++ и C# - лишь инструменты и жизненная необходимость, чтобы получить всё это, поэтому про знание языков даже говорить не буду, это подразумевается.
    Ответ написан
    Комментировать
  • Мёртв ли QML? Стоит ли забыть раз и навсегда о кроссплатформенных гибридных приложениях на Qt?

    Nipheris
    @Nipheris Куратор тега C++
    Моё мнение таково:
    1) популярность QML на "том же Upwork" зависит от популярности C++ на "том же Upwork";
    2) C++ - язык крупномасштабной командной разработки, либо же разработки узкоспециализированной;
    3) заказы на крупномасштабную командную разрабоку всегда будут составлять лишь небольшую часть заказов на Upwork ввиду природы этого ресурса (т.к. на этом ресурсе не только крупные заказы а ЛЮБЫЕ заказы);
    4) вывод: Upwork - плохой критерий оценки пригодности QML для продакшена.

    Что касается React Native - это инструмент для задействования frontend-рабочей силы в сфере, где специалист QML/C++ будет более дорогим. Это разумный выбор для приложений и компаний, где ещё нет C++ разработчиков но есть JS разработчики, и где ещё нет C++ кодобазы, но есть JS, либо ещё нет никакой вообще.

    Примерно с таким же успехом я могу заявить, что Electron - лучший инструмент для продакшен-десктопа. Ну понятно наверное о чём я говорю.
    Ответ написан
    1 комментарий
  • Какую вы знаете литературу о внутренностях С++?

    Nipheris
    @Nipheris Куратор тега C++
    Advanced C and C++ Compiling
    Linkers and Loaders.

    Да, на английском. Советую таки читать в оригинале:
    а) меньше неточностей;
    б) будете привыкать к терминологии, рано или поздно будете понимать быстрее чем в переводе;
    в) не все книги переведены (сильно не все, особенно такие).
    Ответ написан
    Комментировать
  • Как операционная система понимает, сколько нужно очистить память?

    Nipheris
    @Nipheris Куратор тега C++
    Факт 1. malloc и free реализуется не ОС, а рантайм-библиотекой языка C/C++. Да, безусловно, время от времени рантайм библиотека делает системные вызовы для того чтобы получить от ОС адресное пространство, но делается это далеко не на каждый malloc/free.

    Факт 2. Вам нужно чётко понимать, что работаете вы со средствами языка и стандартной библиотеки языка, а не ОС. Если на каком-то устройстве скомпилированная программа на C должна работать без ОС, то и способы реализации функционала malloc/free будут иные.

    Факт 3. Алгоритмы, реализующие работу malloc и free, хранят довольно много служебной информации для себя, в частности размер и положение выделенных блоков. Вы не имеете непосредственного доступа к этой информации, но это не значит что её нет. Её достаточно как минимум для того, чтобы выделять вам новые блоки и корректно освобождать старые. Такие алгоритмы называются менеджерами памяти. Кстати в этой незамысловатой статье на вики написано о так называемой иерархии менеджеров памяти. Если вы ознакомитесь с этим понятием, узнаете наверняка больше, чем из всех ответов вместе взятых.
    Ответ написан
    Комментировать
  • Как сделать запрет на редактирование файла для второго пользователя если его открыл первый пользователь?

    Nipheris
    @Nipheris Куратор тега C++
    https://msdn.microsoft.com/en-us/library/system.io... - значение этого параметра нужно выставить в Read. Не стоит велосипеды городить, стоит изучить стандартную библиотеку.
    Ответ написан
    Комментировать
  • Как создать интерфейс на С++ в VS?

    Nipheris
    @Nipheris Куратор тега C++
    Берёте Qt и пишете. Заодно будет претензия на кроссплатформенность.
    Можно ещё WTL, если уж очень хочется Windows-only и поближе к WinAPI.
    Голый WinAPI не советую.
    Ответ написан
    Комментировать
  • Как реализовать кроссплатформенное ПО с библиотеками для Windows/Linux?

    Nipheris
    @Nipheris Куратор тега C++
    Как это правильно реализовать?

    Если коротко - то написать разные реализации одинаковых хедеров. Можно линковать статически, можно динамически (разумеется, тут всё-таки придётся пошаманить с макросами, чтобы учесть специфичные для платформы вещи).
    Ответ написан
  • Какую библиотеку сокетов на c++ лучше использовать для связки клиента на js?

    Nipheris
    @Nipheris Куратор тега C++
    boost.asio
    Ответ написан
    Комментировать
  • Как поступить с выбором среды разработки после года работы в C++ Builder?

    Nipheris
    @Nipheris Куратор тега C++
    Как сделать переход с C++ Builder как можно менее безболезненным!

    Если действительно есть время и желание, то попробуйте поработать с "голым" стеком. Сборка - шелл-скриптом, редактирование в редакторе общего назначения. Тогда вы сможете выбрать по отдельности компилятор и редактор.
    Какой компилятор выбрать - вопрос отдельный, зависит от привычной вам платформы и ваших целей в плане изучения технологии. Можно, например, Клэнг попробовать.

    Когда всё это соберёте в кучу сами, можно будет попробовать CMake - инструмент непростой, местами даже замороченный, но не даст вам расслабиться и будет хорошим вложением времени, если вы собрались заниматься C++. В это же время вы можете определиться со своими предпочтениями в плане занятости и платформы на которой хотите работать.

    IDE станет для вас лишь одним из инструментов и вас этот вопрос будет волновать в последнюю очередь.
    Ответ написан
    Комментировать
  • 'IdFTP1' was not declared in this scope как исправить?

    Nipheris
    @Nipheris Куратор тега C++
    Вы пытаетесь воспользоваться некоей сущностью IdFTP (судя по всему это должен быть указатель на объект класса), никак не описав её перед использованием. Компилятор не может сам догадаться, что это за сущность, что она из себя представляет и как с ней работать, о чём вам и сообщает.

    Это формальное описание проблемы. Больше информации я дать вам не могу - неоткуда её взять - и не вижу особого смысла, т.к. вы скорее всего видите код на C++ впервые (хотя компиляторы большинства других языков сказали бы вам то же самое). Советую или учить язык, или нанять специалиста для решения задачи.
    Ответ написан
    Комментировать