Задать вопрос
  • Как передавать сообщения в неактивное (свёрнутое) окно?

    @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 суффикс отношения не имеет.
  • Как назвать такую конструкцию?

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

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

    @MarkusD Куратор тега C++
    KeyDel , что такое map_type и в каком именно коде при вызове addData транслятор выдает ошибку?
  • Почему C/C++ проекты очень долго компилируются?

    @MarkusD Куратор тега C++
    zeuss56, а... конкурентная сборка. :)
    Ктож мог подумать что у тебя она не включена. Хорошо что теперь она работает. Я, в свое время и давным давно, тоже не сразу про нее узнал и транслировался по 30-40 минут. Когда указал "-j" на все ядра, время полной сборки того проекта сократилось до 3-5 минут.

    Я могу еще такое рассказать. На время трансляции сильно влияет и сам код. Например, обилие макросов в коде очень сильно повышает время трансляции. Буквально катастрофически. На моем богатом опыте, увеличение времени от обилия макросов достигает +40..60% общего времени трансляции. Неправильное использование форм директивы #include может привести к увеличению времени трансляции до +20%. Т.н. "include guard"-ы [?] спокойно увеличивают время трансляции до +5..10%. Любая эвристика с логарифмической трудоемкостью в шаблонах и при обильном использовании приводит к увеличению времени трансляции до +8%.
    Факторов увеличения времени трансляции C++ кода вообще довольно много. Поэтому большие проекты на C++ обычно собираются порядка часа или двух. Даже при условии распределенной сборки.
    Тут главное - это просто понимать неизбежность последствий использования тех или иных конструкций языка.
  • Как назвать такую конструкцию?

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

    @MarkusD Куратор тега C++
    Данил Васькевич, код strcat_s(res, 100+strlen(sentense1), sentense1);.
    Расскажи своими словами и максимально детально, что именно делается в этом коде.
  • Как я могу заблокировать getch() из ncurses на несколько секунд?

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

    @MarkusD Куратор тега C++
    Mercury13, а, понятно. Да не, с decltype в этом месте все в порядке.
    Просто я изначально не совсем понял что под константным буфером понимается простой статически выделенный массив.
    Собственно, с этим и есть некоторая проблема касательно твоего вопроса. Ведь строковой литерал имеет тип const char[N]. Т.е. после получения характеристики ODR-used и размещения в статической памяти это будет точно такой же статически выделенный массив константных символов.

    Их можно различить только на этапе компиляции, чисто теоретически. Но и там литерал не будет отличим от constexpr статически выделенного массива.
    Можно попробовать покопаться вокруг вот такого хака. Хоть он и на C, возможно из этого можно вынести какие-нибудь идеи для C++ и constexpr.

    Готового решения у меня, откровенно, нет. Но я подумаю над этим вопросом. :)
  • Как в шаблоне Си++ отличить константный буфер от строкового литерала?

    @MarkusD Куратор тега C++
    Mercury13 , давай тут для начала с терминологией разберемся.
    Ради оптимизации на обычных строковых литералах (первый юнит-тест) я пошёл на неочевидную работу на константных буферах (второй юнит-тест).

    str::concat("alpha\0\0", "bravo"sv)
    Вот тут используется строковой литерал "alpha\0\0" и строковой литерал "bravo" с приведением его к std::string_view. Верно я ведь понимаю?

    str::concat(const_cast<const decltype (a)&>(a), b)
    a ты называешь константным буфером? Я правильно понимаю?
  • Как уменьшить загрузку процессора при свернутом окне программы?

    @MarkusD Куратор тега C++
    Glace , а где у тебя в вопросе твой код цикла обработки сообщений и, собственно, та самая on_message?
  • Как стереть элемент с помощью vector.erase()?

    @MarkusD Куратор тега C++
    arteskin , эта идиома называется erase-remove [?].
    Свое условие ты можешь задать при использовании std::remove_if [?].
  • Как правильно масштабировать 2d объекты в opengl?

    @MarkusD Куратор тега C++
    Anthony228357 , процесс настройки контекста нетривиален. Твой вопрос относится именно к настройке контекста. Тебе стоит показать свой код настройки чтобы можно было определить, чего и в каком объеме тебе не хватает для настройки правильного отображения пространства в любом разрешении и при любом соотношении сторон.

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

    shibal,
    Но если батарея сдохла, то разве ноут не должен был продолжить работу, так как он был подключен к сети?

    Конечно. Батарея в ноуте только заряжается при подключении БП и никак не участвует в его работе до отключения БП.

    Если все хорошо с ноутом и дело только в батарее, значит по идее если я сниму батарею, то ноут должен включиться разве не так?

    Нет, он может находиться в защите питания.

    Я также подозреваю что проблема в батарее, так как перед тем как он вырубился окончательно, сначала ноут вырубился просто так

    Если ноут находится в защите питания, его оттуда достать можно только особым образом. Детали можно узнать в сервисном руководстве к ноуту. Но режим защиты питания сперва еще надо распознать. Ноут может быть и в режиме защиты электроники, тогда надо найти неисправный компонент и удалить его. Так же наперво тебе надо, все-таки, правильно определить работоспособность БП.

    Причин может быть уйма. Думаю, тебе лучше все-таки в сертифицированный СЦ обратиться. За деньги любой СЦ выполняет любые работы.
    Я не получаю от тебя нужной информации, поэтому мне больше нечего тебе предложить.
  • Ноутбук ни на что не реагирует. В чем может быть причина?

    shibal,
    Амперметром

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

    На моем ASUS G750JS от 2013 года батарея померла в 2018м году. Это даже при условии того что я очень бережно к ней относился. Ноут же после этого просто работал в режиме ПК, т.е. исключительно от сети. Это нормально.
    Другая штука - это почему твой ноут однажды внезапно выключился. Если внезапно, то это может быть в результате защиты от поломки электроники. Тот же G750JS в 2016 году начал отключаться потому что при деформации клавиатуры от печати стала прогибаться плата оперативной памяти под клавиатурой. Я заменил оперативу и переместил обе плашки вниз. После этого проблем с выключением больше не было.
    Моя знакомая как-то смогла свой Sony VAIO увести в защиту питания. В этом режиме, пока не сделать нужное сервисное колдунство, ноут напоминает кирпич. Но я нашел сервисное руководство к ноуту и вынул тушку из этой комы. Режим защиты питания у твоего ноута тоже есть. Обычно такой кирпич остается только в авторизованный СЦ нести.
    БП все того же G750JS легко уходит от ответственности питать ноут если видит что к его выходу ничего не подключено. Образумить БП возможно только включив его с нагруженным выходом в сеть. Без подключения к ноуту, иными словами, БП питание на выходе не показывал вообще.

    Как видишь, причин просто выше крыши. А информации ты выдал пока крайне мало.
  • Ноутбук ни на что не реагирует. В чем может быть причина?

    shibal , назови точную модель этого ноутбука.
    Я проверил зарядное устройство и оно получает питание из розетки, но не передает его в ноутбук.

    Как и чем конкретно ты это проверил?