• Когда использовать ООП?

    DevMan
    @DevMan
    ФП – вообще про другое.
    MVC – просто подход. спокойно реализуется и без ООП.

    ООП – это управление сложностью/декомпозиция.
    если вы делаете разовую маленькую задачу, заморачиваться им нет смысла.
    Ответ написан
    2 комментария
  • Верно ли решено задание?

    Zoominger
    @Zoominger
    System Integrator
    cout << "Z > 7";

    Бгг, вы же просто выводите ответ, а всё решение в таком случае вообще не имеет смысла.
    Ответ написан
  • Как эффективно восстанавливаться к снапшоту?

    gbg
    @gbg Куратор тега Linux
    Любые ответы на любые вопросы
    1) Хранить образы в хранилище с механизмом COW (ceph, ocfs2, btrfs, zfs)
    2) вместо отката к снапшоту просто создавать новый образ на базе нужного снапшота, а старый образ - стирать.

    Первое и второе вместе дают возможность клонировать машины сотнями в секунду.
    Ответ написан
    7 комментариев
  • Как добавить путь LD_LIBRARY_PATH в коде с++?

    Tesla4o
    @Tesla4o Автор вопроса
    Без пользы жизнь - безвременная смерть... В. Гете
    Спасибо за ответы! Проблему решил просто!
    std::system("eсho \"export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/my/dir/\" >> ~/.bashrc");

    Может комуто тоже это поможет.
    Ответ написан
    2 комментария
  • Opengl 4.* или vulkan?

    TrueBers
    @TrueBers
    Гуглю за еду
    Это вообще разные вещи.
    Нужно отличать изучение API, от изучения технологии. Если вы хотите выучить просто API, учите что угодно, ибо разницу заметите только, когда поймёте основы, базу.

    OpenGL проектировался когда были другие архитектуры железа. Мультипроцессорность была только в теории, и считалась уделом суперкомпьютеров и ненужной для пользовательских ПК.
    Можно привести аналогию: OpenGL == C++, Vulkan == асинхронный Assembler + hardware threads. Например, в C++ сейчас довольно много архитектурных косяков, которые пытаются решить новыми стандартами, объявляют какие вещи устаревшими, потому что они концептуально неверны и не подходят под современные реалии.
    Но, при этом, вы можете всё то же самое написать на ассемблере, но нужно намного лучше понимать, как работает процессор и ОС, самому писать примитивы синхронизации, и т. п.

    Для этих же целей и создавался вулкан. Для программирования на нём, нужно знать все тонкости железки, читать кучи пейперов от той же НВидии, исследовать, придумывать новые фичи для современных архитектур с нуля, которые изначально были придуманы в OpenGL, но для старого железа.
    Т. е. на Вулкане нужно делать больше руками, больше оптимизировать. Вместо одного вызова функции OpenGL, на вулкане придётся несколько сотен строк написать. При этом, если вы не понимаете какой-то одной тонкости, вы сделаете менее эффективнее то, что изначально было хорошо реализовано в OpenGL. К тому же, OpenGL умеет выбрасывать ошибки, в случае, когда вы где-то накосячили. Вулкан же их не выбрасывает, он полагается на то, что вы уже знаете как этим пользоваться. Точно так же, как ассемблер просто меняет состояние регистров, у него нет понятия ошибки. Как интерпретировать эти регистры, зависит от того, насколько хорошо разработчик читал мануал к процессору.

    В итоге, я бы ответил так:

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

    Если же вы пишете простые прикладные вещи, которым нужно показать какую-то графику, то учите OpenGL. Здесь вы учите только API, соглашаясь с уже готовым, слегка устаревшим, архитектурным дизайном.

    Если хотите писать игры не мирового класса, то учите готовые движки, Unity или Unreal. Они уже поддерживают за вас Vulkan, продумали за вас API и архитектуру.
    Ответ написан
    2 комментария
  • Как создать папку с учетом имени пользователя c++?

    @MarkusD Куратор тега C++
    все время мелю чепуху :)
    Для современных версий ОС Windows в наборе WinAPI присутствует функция SHGetKnownFolderPath[?].
    Она позволяет получить путь к некоторым предварительно определенным папкам, набор которых описан абстракцией KNOWNFOLDERID[?].

    Тебе подойдет FOLDERID_Desktop для получения папки рабочего стола пользователя.
    При работе с этой функцией очень важно не забывать пользоваться функцией CoTaskMemFree[?] для освобождения памяти, переданной из функции через указатель ppszPath.

    Небольшой пример использования
    wchar_t* path_buffer = nullptr;
    if( FAILED( ::SHGetKnownFolderPath( FOLDERID_Desktop, KF_FLAG_DEFAULT, 0, &path_buffer ) ) )
    {
    	::CoTaskMemFree( path_buffer );
    	LOG_ERROR( LOG_CHANNEL, "Failed to get known directory; error - #{:08X}.", ::GetLastError() );
    	// terminate ...
    }
    
    std::wstring user_desktop_path{ path_buffer };
    ::CoTaskMemFree( path_buffer );
    
    // whatever with `user_desktop_path` ...
    Ответ написан
    Комментировать
  • Как создать папку с учетом имени пользователя c++?

    @TheCalligrapher
    А почему вы вообще решили, что папка Users располагается на C:?

    Создавать папки в домашней директории пользователя следует через значение переменной окружения %USERPROFILE%, а не заниматься ручным склеиванием кусочков, как в вашем примере. В %USERPROFILE% содержится полный путь к домашней директории текущего пользователя. От него и начинайте танцевать.

    И пытаться конкатенировать через + широкие строковые литералы и узкую std::string - бесполезное занятие. Почему вы смешиваете широкие и узкие строки в своем коде? Хотите работать с широкими строками - работайте с широкими строками. std::wstring, а не std::string.
    Ответ написан
    1 комментарий
  • Есть ли сайт на котором есть большое руководство по c++/c#?

    milssky
    @milssky
    Координатор племени фиолетовых обезьянок
    Ответ написан
    Комментировать
  • Есть ли сайт на котором есть большое руководство по c++/c#?

    @FabiBoom
    https://ravesli.com/
    Еще доки подробненько так описывают:
    www.cppreference.com
    Ответ написан
    Комментировать
  • Может ли TCP соединение работать сразу с несколькими клиентами?

    @nirvimel
    TCP соединение - это сокет. Открытый сокет связывает конкретный порт на локальной машине с конкретным портом на конкретной удаленной машине (и никак иначе). Открытый сокет соединяет всегда две стороны. Не существует многосторонних сокетов. Но на одной машине может быть открыто сколько угодно сокетов.
    Ответ написан
    Комментировать
  • Как заставить CMake искать библиотеку нужной разрядности через find_package?

    Собирал x86 и x64, притом в один каталог не получилось.

    И не надо. Лично я считаю это извратом (несколько конфигураций в одной общей папке), заставляющим выдумывать соглашения об именах и всякие раскладки по подпапкам, которые у всех потом свои, велосипедные.

    Мне нужно каким-то образом выбирать каталог для поиска OpenCVConfig.cmake через find_package(), т.е. добавлять его в CMAKE_PREFIX_PATH видимо.

    Неплохая идея. И почему не получилось?
    Вообще по идее конфиг библиотеки (который OpenCVConfig.cmake) должен проверять разрядность и не давать подключать библиотеку с невалидной разрядностью. По идее тогда и несколько путей можно указать (не уверен, нужно проверить).
    Ответ написан
    7 комментариев
  • Как изменить тип переменной?

    @Qualiant
    А что мешает ввести новую переменную?
    Ответ написан
    Комментировать
  • Как изменить тип переменной?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Разве что std::variant, но и там надо заранее указать все допустимые типы.
    Ответ написан
    Комментировать
  • Как изменить тип переменной?

    Не выйдет. C++ статически типизирован, и это то, что позволяет ему работать быстро.
    А зачем, собственно, это понадобилось? В конкретной ситуации можно что-нибудь придумать.
    P.S. Если хочется "просто", стоит оставаться на Питоне :)
    Ответ написан
    Комментировать
  • Как происходит перемещение файлов между каталогами на физическом уровне?

    saboteur_kiev
    @saboteur_kiev Куратор тега C++
    software engineer
    На уровне OS нужно выяснить, файл перемещался в пределах раздела, или между двумя разделами.
    Если в пределах одного раздела, то просто меняется путь к файлу. Если между разделами, то выполняется копирование с удалением.
    Ответ написан
    7 комментариев
  • Какой codestyle для написания методов допустим?

    maaGames
    @maaGames
    Погроммирую программы
    Не нормальна.
    Нехорошо давать те имена, которые уже присутствуют в области видимости, даже если "это компилируется".
    Не стоит забывать, что психованный маньяк, который будет читать твой код, знает где ты живёшь.
    Ответ написан
    Комментировать
  • Как получить QAbstractVideoSurface из QVideoWidget или QMediaPlayer до Qt 5.15?

    Zifix
    @Zifix Куратор тега Qt
    Barbatum
    Посмотрите, каким коммитом эта возможность введена, и бэкпортируйте его, или напишите свою реализацию.
    Ответ написан
    6 комментариев
  • Почему не запускается приложение Qt с QVideoWidget?

    AVI это контейнер, в нем кодек может быть любой. В windows media player этот файл проигрывается?
    Ответ написан
    3 комментария
  • Транзитивная передача сигнала в Qt?

    gbg
    @gbg
    Любые ответы на любые вопросы
    Можно приконнектить сигнал к сигналу.
    Ответ написан
    Комментировать