Задать вопрос
  • OpenVPN как шлюз не работает почему?

    @res2001
    С ВПН сервера трафик от клиента куда должен идти? На роутер, а дальше в инет?
    Роутер что-нибудь знает о ВПН подсети? Надо на роутере добавить маршрут для ВПН подсети через ВПН сервер.
  • Как на обычном ПК сделать доступ по ссылке?

    @res2001
    Предложили как-то сделать адрес сайта через какой-то сервис

    Какой-то сервис называется, видимо, DDNS. Нужна поддержка DDNS на вашем сервере/роутере. Смысл в том, что при смене адреса, роутер сообщает об этом DDNS серверу, а тот уже, соответственно, начинает возвращать на DNS запросы обновленный адрес. Обычно в роутерах поддержка DDNS есть, в линукс/винду надо ставить какой-то дополнительный софт, не знаю какой. Поддержка DDNS нужна именно на устройстве, которое подключается к провайдеру и на котором меняется внешний адрес, обычно это роутер.
  • Как зациклить выполнение команды в bat если процесс отпадает?

    @res2001
    Что значит "процесс отпадает"?
    Судя по коду у вас все зациклено навечно. Оно вам точно надо?
    Я бы запускал через шедулер, там и расписание можно настроить.
    На вид в коде ошибок нет. Если путь, указанный в cd существует, то будет запускаться скрипт. Питон должен быть доступен для запуска из командной строки (путь к питону должен быть указан в PATH) под пользователем из-под которого запускается батник. В шедулере по умолчанию задания запускаются из-под LocalSystem, настройки PATH у него могут не совпадать с настройками пользователя под которым работаете вы.
  • Имитация ООП в C, где ошибка?

    @res2001
    При вызове виртуальных функций через макрос надо указатель приводить к нужному типу функции, т.к. в vtable будут лежать не типизированные указатели (void*).
    Так что типы для каждой виртуальной функции должны быть определены с помощью typedef.
    Так как имена виртуальных функций реально будут у макросов, сами виртуальные функции должны называться как-то по другому, ну там подчеркивание добавлять или еще что.

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

    @res2001
    Wataru, Не согласен:
    1. vtable нужен только для виртуальных функций, для обычных, не виртуальных, она не используется. Автор, по моему, еще не дошел до реализации наследования и полиморфизма, так что явно не думал об этом.
    2. таблица виртуальных функций создается в единственном экземпляре, она одна для всех экземпляров класса. В структуре класса хранится только указатель на нее.
    Вызовы виртуальных функций можно завернуть в макросы с тем же именем, что я предложил в прошлом сообщении, в макросе вызывать нужный метод через vtable.
    Как-то так вижу.
  • Имитация ООП в C, где ошибка?

    @res2001
    Я бы предложил вообще не делать указатель на функцию внутри структуры.
    Просто именуйте функции по определенной схеме с указанием названия класса в имени функции, например: ClassName_FunctionName.
    В таком подходе есть преимущество - избавляемся от коссвенности при вызове функции, т.е. вызов будет происходить чуть быстрее, чем с использованием указателя на функцию.
    Но передавать указатель на объект в функцию все равно придется :)
    На хабре есть на тему ООП на Си несколько статей, одна из них: https://habr.com/ru/post/568588/
  • Ошибка при установке windows?

    @res2001
    L1nw0od, Согласен с John Smith, стоит начать с теста памяти.
    На моей практике самые не понятные ошибки при установке винды связаны со сбоящей памятью (еще из-за дохнущего БП могут проявлятся разные чудеса, но обычно это на стационарных ПК).
    Я пользовался диагностическим набором от adminpe.ru, там мемтест есть в загрузочном меню, инструкция по изготовлению загрузочной флешки присутствует в наборе.

    И берите образ винды с сайта микрософт, а не с левых источников.
  • Как подключить библиотеку в плюсах?

    @res2001
    Вам точно это надо на для cmake? Я тут не увидел ваших попыток сделать подключение библиотеки в cmake.
    По моему ваш проект, в который вы хотите подключить библиотеку, не cmake.
    У меня винда и mingw-make. Хотелось бы поменьше всяких дополнительных пакетов и зависимостей. И чтобы сорцы либы лежали рядом относительно main.cpp, с возможностью их правки.

    Ну и положите их рядом и включите исходники библиотеки в перечень исходников вашего проекта. Пусть она собирается вместе с вашим проектом. Это такой самый деревянный вариант.

    Я бы конечно, попытался использовать пакетный менеджер для установки библиотеки в систему (Linux, msys2, ...), если она есть в пакетах. Если в пакетах нет, то можно собирать и устанавить библиотеку в систему согласно описанию и подключаете в проект обычным образом: добавить путь к файлам заголовков библиотеки с помощью ключа компилятора -I, добавить путь к каталогу с динамической библиотекой с помощью ключа компилятора -L, добавить в линковку библиотеку с помощью ключа компилятора -l, использовать #include в своих исходниках для подключения заголовков библиотеки.
  • Кодирование IP-пакетов в звук?

    @res2001
    WSGlebKavash, Направленная антенна с усилителем и 4G модемом. Покупаете готовый комплект, вам останется только повесить повыше и направить в нужную сторону.
    Обычно на выходе вы получаете Ethernet, но можно найти вариант, чтоб сразу WiFi раздавал.
  • Ошибка git при push?

    @res2001
    Какой версией git пользуетесь?
    Я использую git, установленный в msys2 с помощью тамошнего пакетного менеджера pacman. Полет нормальный.
    Там же можно установить и много чего еще, от линуксовых утилит и различных библиотек до mingw и clang. В общем, рекомендую.
    Все что установлено в msys2 может быть доступно из винды, достаточно добавить в переменную окружения PATH пути к msys2.

    Так же в винде можно установить WSL, поставить туда любой линукс, установить там git из пакетов и использовать его оттуда, но это немного сложнее и разнообразные IDE и т.п. утилиты с GUI, скорее всего, не смогут его использовать.
  • Assignment operator VS Destructor + Placement new, где аргумент placement new - prvalue?

    @res2001
    три действия оформить в виде перегрузок шаблона функции со SFINAE

    Это, конечно, добавит читаемости коду :-)
  • Assignment operator VS Destructor + Placement new, где аргумент placement new - prvalue?

    @res2001
    floppa322, Не знаю, почему бы и нет.
    Но даже, если этого не произойдет, то в случае обычного оператора присваивания сам оператор должен будет перед присваиванием выполнить действия аналогичные действиям деструктора (да еще будет дополнительно вызван деструктор временного объекта), а в случае присваивания перемещением просто вызовется деструктор временного объекта (в этом случае будет лишнее перемещение данных оригинального объекта во временный).
    Все говорит за то что явный вызов деструктора и размещающего new проще для понимания и эффективней.

    placement new - это замаскированный вызов конструктора на заданном участке памяти.
    Т.е. если расписать содержимое placement new, то будет что-то вроде:
    (reinterpret_cast<T *>(buffer))->T(args);
    В С++ явный вызов конструктора (как метод класса) запрещен, но в MSVS такое когда-то прокатывало и можно было обходится без placement new, как сейчас - не знаю.
  • Assignment operator VS Destructor + Placement new, где аргумент placement new - prvalue?

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

    Лично мне больше нравится вариант с явным вызовом деструктора и размещающего new, именно по тому, что тут все явно. Явное всегда лучше не явного.
  • Зависает намертво или дико начинает тормозит Ubuntu 20.04, как лечить?

    @res2001
    Немного другая ситуация - после выхода из скринсейвера после продолжительного времени не активности начинает дико лагать вплоть до полного коматоза. Если скринсейвер включается на краткое время, то восстанавливается без проблем. Скринсейвер дефолтный - blank screen.
    Пока руки не доходят посмотреть в логах, что происходит, но методом тыка обнаружил, что виноват firefox.
    Если его закрываю перед блокировкой, то просыпается нормально.
  • Чему учит Марк Лутц?

    @res2001
    Луца читал в свое время. Толковый учебник по питону.
    На сколько помню, он там ничего не пишет про сетевое взаимодействие и не описывает соответствующих модулей. Так что может конкретно Луц и не поможет в написании сетевых игр.
    Для этого стоит читать других авторов, возможно, не связанных с питоном (сетевое программирование оно +- на всех языках одинаково). Как и по многим другим более специализированным темам.

    Возможно ТС уже перешагнул уровень учебника и стоит посоветовать что-то более углубленное.
    От себя могу посоветовать изучить следующие направления программирования: сетевое программирование, базы данных и SQL, параллельное программирование. Каждая из этих тем тянет на большую и толстую книгу, а то и не на одну. И это только начало :)

    На счет видеоуроков - можно начинать с видосиков, но после определенного уровня освоения темы станет практически не возможно найти более углубленное толковое видео. Видосики, как правило, закрывают начальный уровень вхождения, дальше либо узкоспециализированные книги, либо "родная" документация.
  • Как найти общие элементы у трех массивов?

    @res2001
    Я бы загнал первый массив в std::unordered_map, где ключ - это значение очередного элемента первого массива, а значение - счетчик. Для всех элементов первого массива, счетчик выставляем в 1.
    Дальше ищем каждое значение второго и третьего массива в mapе, если найдено - инкрементируем счетчик.
    Выводим все элементы из mapы, у которых счетчик равен 3.

    Стоит выбрать самый наименьший по размеру массив и его брать как первый.
  • Когда narrowing conversion Не является implementation defined?

    @res2001
    floppa322, Да, только убедится в этом вам нужно явно в коде.
  • Когда narrowing conversion Не является implementation defined?

    @res2001
    По моему, в приведенном примере это всегда зависит от реалиации, т.к. компилятор не генерирует проверяющий код.
    В приведенном примере длины типов равны, занчит будет просто побитовое копирование. Если бы длины типов были разные, то wide type обрезался до длины narrow type и то же самое побитовое копирование.
    Если включен высокий уровень предупреждений, то в этом месте компилятор ругнется.

    В приведенном примере, если значение uint32 >= 0x80000000, то в результате в int32 будет отрицательное число.
  • Как будет выглядеть данный псевдокод в коде на языке Си?

    @res2001
    mercower26,
    в Си не обязательны фигурные скобки в цикле

    Не обязательны. Но тогда в теле цикла будет выполнятся только 1 следующая после for операция, а у вас это flag=0;
    Это явно не то что нужно. flag должен обнулятся в начале каждой итерации первого цикла. В эту же итерацию должен входить и второй for, а он у вас сейчас не является вложенным в первый for (то что отступами второй for сдвинут относительно первого никакой роли не играет, в С/С++ отступы выполняют декоративную функцию, чисто для удобства разработчиков, компилятору на них наплевать).
    Вообще не стоит экономить на скобках и разметке - они делают код более понятным вам же (и тем кто читает ваш код).
    printf("Результат %d\n",X);
    Что вы хотите тут получить? Тут вы выводите адрес массива Х, а не содержимое. Печать элементов массива надо делать так как приведено в вашем же скриншоте выше.