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

    @MarkusD Куратор тега C++
    NaName444 , а подскажи, с какого стандарта C у структур появились конструкторы?
  • Как организовать Tween систему в рамках ECS (entt)?

    @MarkusD Куратор тега C++
    toster_bodnar , а расскажи, что это за tween анимация такая?
    Какое поведение ты хочешь реализовать через эту систему и компонент?
  • Как правильно исправить шаблон функции С++?

    @MarkusD Куратор тега C++
    LXSTVAYNE , тут для начала необходимо несколько уточнений.
    Для чего именно тебе потребовалось ввести шаблонный параметр шаблона - TStorage?
    Это чтобы покрыть только std::vector, std::list и std::deque? Или для чего-то еще?

    Чем тебе не подходит std::transform [?]? Или ты просто хочешь для самообучения сделать его аналог?

    однако, когда если функция несколько раз перегружена, то уже не работает.

    Тут ты пишешь про то, что передаваемая параметром func функция имеет перегрузки и у тебя сложности к синтаксисом передачи конкретной перегрузки?
  • Как организовать сравнение переменной с элементом массива?

    @MarkusD Куратор тега C++
    Александр Скуснов, да нет, это не так.
    В системах реального времени, коей и является атмега, обработка из памяти 100 пар во время прерывания (на каких-то 18 МГц) - это уже катастрофа. Непонимание этого простого момента регулярно приводит к тому, что устройства у таких разработчиков оказываются непригодными для использования.
  • Как организовать сравнение переменной с элементом массива?

    @MarkusD Куратор тега C++
    Tururupark, быстрее - через switch-case. Еще лучше - вывести аппроксимирующую функцию и работать через нее. Прыгать по коду - не самое легкое решение. Массив - это данные в динамической памяти, для получения которых требуется совершить две выборки из памяти. Двумерный массив - это уже три выборки из памяти. И так далее. Атмега не имеет предсказателя и все операции делает в лоб. Выборка из памяти делается многократно медленнее прыжков по switch-case.
    С другой стороны, 100 меток в switch-case - это точно лишнее с т.з. ручного труда и неплохо бы действительно код переписать в массив. switch-case лучше подходит для типов перечислений.
  • Как организовать сравнение переменной с элементом массива?

    @MarkusD Куратор тега C++
    Александр Скуснов ,
    Хотя 100 пар это ни о чём. Вы время засекали?

    И в каких же условиях 100 пар являются ни о чем? Какие должны быть частоты ядра, шины памяти, процессорного кэша?
  • Код не успевает выполниться.С++.Что делать?

    @MarkusD Куратор тега C++
    1HAWK1, ничего странного. У тебя, просто, логика программы нарушена.
    Зачем тебе читать файл дальше если нужная строка уже прочитана?

    Какой размер имеет этот текстовый файл?
  • Как убрать непечатаемые символы и пробелы из строки?

    @MarkusD Куратор тега C++
    sanek2005, это все хорошо. Только тебе стоит вставить участок твоего кода, в котором ты столкнулся со своей проблемой.
    Отредактируй свой вопрос чтобы в нем был проблемный код.
  • Как убрать непечатаемые символы и пробелы из строки?

    @MarkusD Куратор тега C++
    sanek2005 , все зависит от того, что у тебя за код и как именно эти символы нарушают его работу.
  • Есть ли в C++ функция преобразующая текст в байты и байты в текст по заданной кодировке?

    @MarkusD Куратор тега C++
    Wataru, а вот изюминка в том, что на замену ему пока ничего столь же удобного не придумали.
    Лично мне пришлось перестроить код на использование функций из C: mbrtoc16, mbrtoc32, c16rtomb и c32rtomb. И это потому что, снова, не все реализации стандартной библиотеки C++ реализуют эти же функции. Многие разработчики приходят к такому же решению при отказе от codecvt. Иные пользуются тем же ICU и про codecvt даже не вспоминали.
  • Есть ли в C++ функция преобразующая текст в байты и байты в текст по заданной кодировке?

    @MarkusD Куратор тега C++
    Не смотря на все удобство использования, codecvt на данный момент является устаревшей. Ее уберут из стандарта и стандартной библиотеки. Пользоваться ей сегодня уже нежелательно.
  • Какой из двух кодов будет более читабельным и удобным для использования?

    @MarkusD Куратор тега C++
    have_a_nice_day13, это тоже сбивает с толку. Вот где тип? Почему когда я нашел место переменной по ее имени, мне снова надо искать ее тип? У меня сейчас в голове контекст своей задачи на изменение этого кода, а все подобные игры в прятки заставляют меня переключаться со своего контекста.
    Тут я позволяю себе эмоциональный окрас только чтобы передать тебе примерную атмосферу, в которой будет рассматриваться такой код.

    Выражение в C++ всегда завершается символом ;, который находится в конце строки. Люди ждут выражений не более чем в одну строчку. Когда в конце строки находится не ;, код снова начинает сбивать читателя с толку. В самом крайнем случае допускается разбивка арифметических выражений на несколько строк. Да и то, на ревью такой код с вероятностью 80% потребуют переформулировать в пояснительные константы. Больших арифметических выражений в коде тоже быть не должно.

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

    Тебе определенно стоит ознакомиться с рекомендациями по стилю кода, например: [1], [2], [3], [4], [5].
    Еще тебе обязательно стоит изучить книгу Д. Босуэлла "Читаемый код". Там описывается много способов упрощения жизни себе и другим людям.
  • Как передавать сообщения в неактивное (свёрнутое) окно?

    @MarkusD Куратор тега C++
    Ledane , П4.1 регламента работы сервиса.
    4. После размещения вопроса пользователю запрещается осуществлять:
    4.1. Дублирование вопроса, который уже размещался на страницах Сервиса. В том числе и в случае, если вопрос был удалён модератором, или на вопрос не был дан ответ (т.е. категорически запрещается дублирование вопроса с целью повторного привлечения к нему внимания).
  • Какой из двух кодов будет более читабельным и удобным для использования?

    @MarkusD Куратор тега C++
    have_a_nice_day13, все просто. Тебя не поймут другие люди. При чем, не поймут они тебя именно в плохом смысле, они будут на тебя очень злы. Это потому что ты таким кодом заставляешь их напрягаться и вчитываться для того чтобы найти интересующую их переменную.
    Наверное ты невнимательно прочитал в первый раз, я повторю еще раз. Правило 0 при написании кода - не создавать проблем для его чтения.

    Найди в этом коде переменную impression.
    float intension, empation, insignion, imposion;
    int impresumption, impetition, inversion, illustration;
    bool illusion, impretendion, imperception;

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

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

    @MarkusD Куратор тега C++
    have_a_nice_day13, кода мало, тебе нужно еще объяснить все написанное словами. В чем конкретно смысл существования каждого типа, каждого поля, каждой функции. Если ты не можешь связно сформулировать смысл существования кода, просто сотри его. Код, который ты не можешь объяснить, существовать не должен.

    Без этого объяснения я могу посмотреть на этот код только с т.з. синтаксиса и общего восприятия.
    Пространство имен - это неплохо. Зачем оно создано? Что оно содержит внутри себя? Почему оно называется абсолютно безликим словом client, которое ничего не выражает?
    struct data_t - абсолютно никак не объясняет смысл своего существования. Слово Data не выражает ничего, оно просто говорит что внутри какой-то бессвязный белый шум из байтиков. Почему для определения типа выбрано слово struct? Почему не class?
    struct authorization_t - словом Authorization обозначают данные уже авторизовавшегося пользователя, которому уже присвоен идентификатор сессии. У тебя в этой структуре записаны поля, которые другими людьми оформляются в термин Authentication. Разница между этими терминами даже близко не позволяет один с другим сравнивать.
    const char* login = nullptr, *password = nullptr; - через запятую никогда не пишем. Каждое поле должно быть легко читаемо на своей отдельной строке. А вот таким определением полей через запятую ты ничего не добиваешься, кроме как только усложнения чтения кода. Правило 0 при написании кода - не создавать проблем для его чтения.
    const char* login - константностью данных управлять нужно не так. Именно объекты типа struct authorization_t должны наделяться свойством константности там, где это требуется. Состояние же этих объектов константным делать просто незачем.
    const char* login ... size_t login_sz - при инициализации по умолчанию поле } authorization; имеет неконсистентное и алогичное состояние. Более того, такой набор полей нельзя отнести к коду на языке C++. Эта структура написана на C. Весь набор полей нужно изменить на два поля с типом std::string если ты хочешь писать на C++.
    } authorization; - от кого ты прячешь этот код? Определение поля должно быть легко читаемым. Сейчас оно абсолютно нечитаемое. Чтобы найти это поле глазами, требуется много непозволительных для этого занятия усилий. И, опять же, это не Authorization, а Authentication. С моей т.з. такого поля в этом месте существовать вообще не должно.
    const char* mac = nullptr, *proc_id = nullptr, *mbios = nullptr;
    - все так же, через запятую поля никогда не определяем. Более того, тут уже пошли очень странные нечитаемые и непонятные имена. mbios - что это, акроним или именование в стиле СовКомПоМорДе (Советский Комитет По Морским Делам)? Такие имена невозможно прочитать, они не отражают смысла своего существования. Почему в authorization_t для полей с типом const char* есть семантическая пара size_t, а тут - нет? Все эти поля нужно заменить на std::string.

    У тебя буквально каждая строчка требует кардинальных исправлений. Считай этот разбор бесплатной демоверсией. Больше я на него своего времени потратить не могу.

    в моем проекте практически все классы объявлены глобально. потому что вся программа в бесконечном цикле

    Наличие статически определенных объектов оправдано может быть только требованиями соблюдения стандарта MISRA при разработке встраиваемых систем. В ином случае все статически определенные объекты должны иметь доказательство своей необходимости. Наличие бесконечного цикла не обосновывает необходимость статического размещения каких-либо данных.
  • Что должен знать Core/Системный программист игрового движка?

    approximate solution,
    Комбинаторика, теория вероятностей, графы, матрицы, дискретная оптимизация

    И ничего из этого не относится к разделу Математического Анализа. Если коротко.
    И требования не зависят от того, 2D или 3D движок товарищ собрался делать.
  • Какой из двух кодов будет более читабельным и удобным для использования?

    @MarkusD Куратор тега C++
    have_a_nice_day13,
    могли бы расписать развернутый ответ на вопрос и предложить свой вариант как читабельнее и правильнее бы это выглядело

    Я так понимаю, это вопросительное предложение?

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

    владел только той информацией, что - _t = typedef

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

    @MarkusD Куратор тега C++
    edward_freedom, про Венгерскую нотацию ты написал верно. Она используется для передачи контекста и, во многом, является пережитком прошлого и просто избыточна.
    Суффикс _t является частью соглашения об именовании.

    А вот have_a_nice_day13 в своих словах не прав. К typedef суффикс отношения не имеет.
  • Как назвать такую конструкцию?

    Владимир Коротенко, ну смотри. По объему изложенного я пока вижу что в ответе ты не заинтересован, поэтому просто предлагаю два самых очевидных варианта.
    Первый - это реестр [?]. Это более вероятно, т.к. реестры работают с +/- подобным уровнем данных. Быть может это простой реестр каких-то там запросов.
    Второй - это локатор сервисов [?]. Это менее вероятно. Разве только если сервисами ты назовешь кэширующие источники этих запросов.
    Но это у тебя так же может быть и обычный кэш.

    С учетом этого твоего комментария я могу сказать что тебе лучше переработать архитектуру этого кода и применить локатор сервисов.