Задать вопрос
  • Умные указатели?

    Nipheris
    @Nipheris Куратор тега C++
    Вы, возможно, еще недостаточно освоили ОО-возможности языка C++. Тогда ваш вопрос более чем логичен.

    Видите ли, в языке, где есть какая-либо ОО-модель, неизбежно будут выделяться две категории типов данных - типы данных, экзмепляры которых ведут себя как значения (values), и типы данных, экземпляры которых ведут себя как переменные/объекты (если тут непонятно, опишу подробнее).

    Отличительной особенностью объекта с теоретической точки зрения является identity - некий ключ или признак, с помощью которого этот объект уникальным образом идентифицируется. В ОО базах данных в качестве identity используется т.н. OID. В C++ в качестве identity объектов используются указатели. Это удобно, т.к. место объекта в памяти однозначно идентифицирует его (тут как раз и прослеживается тот факт, что объекты в C++ - это суть переменные, изменять состояние которых можно только строго определенным образом).

    Хотя язык C++ позволяет в теории работать с любым типом как "по значению", так и посредством указателей, реальные классы обычно проектируются так, чтобы подчеркнуть их семантику значение/объект. Например, для типов которые ведут себя как "значения" пишется конструктор копирования и разрешаются операции присвоения. Для типов-"объектов" наоборот, операция присвоения и конструктор копирования запрещаются. Конечно, ничто не мешает превратить указатель в ссылку и работать по ссылке, однако использование ссылки "прячет" от нас информацию об identity объекта. Например, для сравнения одинаковости двух объектов (если это именно "объекты", а не "значения") достаточно сравнить лишь их identity, в терминах C++ - указатели. Если вы превратили их в ссылки, вам придется использовать операцию взятия адреса: &a == &b, что менее логично и удобно, чем сравнить обычные указатели: a == b. Кроме того, важным отличием указателя является то, что одним из его допустимых значений является nullptr, что также может быть удобным (а может и нет).

    Однако, обычные указатели хоть и являются удобным способом моделирования понятия identity, они не предоставляют какой-либо помощи для управления жизненным циклом динамических переменных (коими являются большинство объектов). В результате, программисту гораздо менее удобно использовать динамические переменные, нежели автоматические. И чтобы убить двух зайцев сразу - иметь динамические переменные-объекты с гибким временем жизни и с уникальным identity, и управлять ими удобным способом - придумали умные указатели. По сути эти указатели привязывают тем или иным образом время жизни динамической переменной к структуре программы и к местам использования этих переменных путем реализации концепций владения переменной.
    Ответ написан
    Комментировать
  • Какую выбрать среду для написания кода на С++?

    @res2001
    Developer, ex-admin
    А отлаживать то же в notepad++ будешь? А контекстная справка и прочие плюшки?
    У микрософта всегда была хорошая среда разработки. Не так уж там все и сложно.
    Из других вариантов: NetBeans, Eclips. Но по мне для винды VS лучше.
    Ответ написан
    Комментировать
  • Наследование интерфейсов С++?

    petermzg
    @petermzg
    Самый лучший программист
    Так компилятор прав. Нельзя создать инстанс абстрактного класса.
    Определите все методы, что есть в интерфейсе и все заработает.
    class TcpSocket: public ITcpSocket
    {
    public:
        void start(void)
        {
            cout << "start" << endl;
        }
       void load(void)
       {
       }
    };
    Ответ написан
    3 комментария
  • Arduino. Как сделать мелодию для двух и более пьезоизлучателей?

    "Воспроизводиться одновременно может только один сигнал. Если сигнал уже воспроизводится на одном порту, то вызов Tone() с номером другого порта в качестве параметра ни к чему не приведет, если же Tone() будет вызвана с тем же номером порта, то будет установлена новая частота сигнала."

    Походу средствами Arduino никак.

    "Генерирует на порту вход/выхода сигнал — прямоугольную "волну", заданной частоты и с 50% рабочим циклом. Длительность может быть задана параметром, в противном случае сигнал генерируется пока не будет вызвана функция noTone(). К порту вход/выхода может быть подключен к пьезо или другой динамик для воспроизведения сигнала.
    Использование функции Tone() помешает использовать ШИМ на портах вход/выхода 3 и 11 (кроме платы Arduino Mega)."

    Из этого следует, что реализован он на таймере.
    А таймеров на Уне 3шт, на меге 4шт, если не ошибаюсь. Нулевой затронет задержку (delay), его лучше не трогать.

    Так что вам надо идти к тем, кто программирует Atmel'ы, а не ардуины и спросить, как сделать меандр на x Герц на Си/Ассемблере на несколько пинов с разной частотой.

    Либо если функционал минимален, попробовать просто включать выключать порт с задержками в миллисекунды, впихнуть в это функцию и радоваться жизни. Но это будет сильно нагружать МК, если делать в лоб.

    Ну или найти что-то, что будет генерировать меандр заданной частоты и управляться от МК.
    Ответ написан
    31 комментарий
  • Есть ли проекты на С++, исходники которых стоят внимания, а то есть проекты написаны качественно и там есть чему поучиться?

    Nipheris
    @Nipheris Куратор тега C++
    JSON Spirit (на гитхабе оригинала нету, только зеркала от других разработчиков)
    SOCI
    cpp-netlib
    Драйвер Монги для C++
    mapbox-gl-native

    По поводу сборки: сейчас в плюсах без CMake никуда. Если хотите собирать чужие проекты и разрабатывать свои - стоит познакомиться. Из перечисленного списка почти все умеют им собираться. В более старых проектах популярны autotools и классические make-файлы, еще можно встретить SConstruct.
    Ответ написан
    Комментировать
  • LoadPicture to Console?

    AtomKrieg
    @AtomKrieg
    Давай я поищу в Google за тебя
    Нельзя. Можно только взломать cmd.exe
    Ответ написан
    Комментировать
  • Как роботизировать, реализовать видеонаблюдение?

    gbg
    @gbg Куратор тега Программирование
    Любые ответы на любые вопросы
    Купите камеру с возможностью вращения и оптическим зумом. Это проще и надежнее, чем изобретать двумерного робота.
    Ответ написан
    Комментировать
  • Какой наиболее близкий вариант кросcплатформенной разработки с компонентами аналогичными Devexpress?

    gbg
    @gbg
    Любые ответы на любые вопросы
    Выбросить паскаль. Перестать программировать мышкой, начать программировать головой.
    Взять Qt. Там работа с таблицами сделана правильно.
    Ответ написан
    Комментировать
  • Идея сервиса и приложения для удобства населения. Как реализовать?

    nki
    @nki
    bezkart.ru готовая система лояльности
    Уже давно надо понять, что идея сама по себе ничего не стоит.
    Ответ написан
    2 комментария
  • Идея сервиса и приложения для удобства населения. Как реализовать?

    za4me
    @za4me
    Человек
    Планирую найти единомышленника или единомышленников и воплотить проект в жизнь. единомышленников, которые помимо тупо прибыли


    Не вы первый, не вы последний с уникальной идеей которая скорее всего уже где-то реализована. Разработчики тоже хотят кушать, и у них есть свои идеи, а бесплатно работать на кого-то удовольствие я думаю сомнительное.
    Ответ написан
    2 комментария
  • Идея сервиса и приложения для удобства населения. Как реализовать?

    ManWithBear
    @ManWithBear
    Swift Adept, Prague
    Тут таких "уникальных" и "оригинальных", боящихся что сопрут их идеи, по 5 штук на дню. Почему люди должны работать с вами за вашу идею? Вы ничем не отличаетесь от остальной массы "изобретателей".
    Ответ написан
    1 комментарий
  • Как найти значение цвета в hex файле?

    @nirvimel
    Ваш roboto-icons.rp - это ZIP-архив. Распакуйте его, разберитесь со структурой каталогов, найдите ваши стили, подредактируйте, запакуйте все обратно и верните архиву расширение .rp.
    Ответ написан
    7 комментариев
  • Как объединить и разъединить byte[]?

    Я бы сделал это при помощи сериализации (класс BinaryFormatter).

    Создаём класс, который содержит картинку и текст, пихаем туда твою картинку и текст, сериализуем всё это при помощи BinaryFormatter.Serialize( ) в MemoryStream, получаем из него массив байт.

    При получении массива байт, создаём MemoryStream из массива, десериализуем из него при помощи BinaryFormatter.Deserialize( ) - получаем класс с нашей картинкой и текстом
    Ответ написан
    Комментировать
  • Как организовать login page с кнопкой для входа в интернет?

    mourr
    @mourr
    Passionate JS developer
    Это называется Capative Portal, гуглите в эту сторону. Решений полно готовых
    www.dd-wrt.com/wiki/index.php/Captive_Portal
    Ответ написан
    Комментировать
  • Можно ли у ТВ вместо монитора установить больше разрешение чем заявлено?

    Stalker_RED
    @Stalker_RED
    Даже если сможете, лишние физические пиксели в мониторе не появятся. Даже если монитор примет такой сигнал, ему придется ресайзнуть картинку до 1366x768.

    Попробуйте поменять DPI www.pcworld.com/article/2953978/displays/use-windo...
    К сожалению, в возможность настраивать DPI для отдельного монитора появилась только в десятке.
    Ответ написан
  • Почему Python multiprocessing нестабилен?

    @nirvimel
    Хорошо, что вы указали в тегах Windows, это все объясняет. Под Windows нет простого способа "раздвоиться" процессу при вызове multiprocessing.Process, поэтому осуществляется очень сложная эмуляция этого поведения. При этом функция target выдирается из модуля, запускается в отдельном интерпретаторе, а все параметры сереализуются передаются и десереализуются перед вызовом target, при этом инициализация модуля в новом интерпретаторе выполняется частично (инициализируется только глобальный контекс). Подробнее об этом, например, тут, есть еще одна очень хорошая статья где подробно рассмотрен этот механизм, но сейчас не найду ссылку.

    Коротко о том, как готовить multiprocessing под Windows:
    1. Разделять процессы (вызов multiprocessing.Process()) как можно раньше в коде.
    2. По возможности избегать инициализации любых ресурсов и глобальных переменных до разделения. Учитывайте, что этот код выполняется во всех процессах независимо и может давать кучу сторонних эффектов.
    3. Не передавать через args никаких сложных объектов с "поведением" (кроме объектов из самого multiprocessing, он сам знает как их правильно передавать), только голые данные (примитивы или объекты состоящие только из примитивов), которые сериализуются без сторонних эффектов.
    4. Создавать дочерние процессы один раз, и на протяжении всего времени работать с ними посредством обмена сообщениями через Pipe/Queue. Не порождать новые процессы в цикле вычислений в момент "когда понадобятся".
    5. Queue при попытке записи/чтения может блокировать процесс, если при этом происходит запись/чтения в/из нее в другом процессе. (Думаю, именно это и происходит в коде в вопросе).
    6. Лучше использовать Pipe, который в худшем случае блокирует один процесс, а не все, как Queue.
    7. При создании процесса можно передавать ему два Pipe (input одного + output другого), в вызывающем процессе хранить соответствующие им коннекторы и только при помощи их общаться с дочерним процессом.
    8. Можно не делать process.join(), а просто читать результаты из output Pipe, они прочтутся только после того как попадут туда, что дальше будет происходить с процессом уже не важно (можно поставить return после записи в Pipe в дочернем процессе).
    Ответ написан
    4 комментария
  • Управление памятью в С++?

    petermzg
    @petermzg
    Самый лучший программист
    Понятия "мусор" в С++ нет, так как не должно быть безхозных обьектов, если такие появляются, это называется "утечкой памяти".

    В С++ бывает 2 типа использования памяти.
    1. На стеке. Такую память по особому выделять не нужно и освобождать тоже.
    Пример:
    int a = 3;
    2. В "куче". В этом случае уже вы отвечаете за выделение и освобождение памяти.
    Работает через оператор new. Или функции malloc, calloc и т.п.
    int* p = new int;
    delete p;
    Ответ написан
    Комментировать
  • Математическая алгоритмизация и область применения?

    @kstyle
    что вы понимаете под математической алгоритмизацией?
    стандартные алгоритмы - да, без них никак. я так и не понял, согласны вы с этим или сомневаетесь?
    вообще, неплохо бы читать вопрос пару раз перед публикацией. набор слов местами.
    Ответ написан
    2 комментария
  • Как сохранять чат канала Twitch?

    Denormalization
    @Denormalization
    Twitch использует обычный IRC протокол для чата + авторизация с oauth токеном.
    Токен получается тут https://twitchapps.com/tmi/

    Подключаемся к серверу irc.twitch.tv , авторизируемся, заходим на канал и общаемся\сохраняем сообщения.
    Ответ написан
    Комментировать