Задать вопрос
  • Как сделать цикл C# для игры?

    4evest GameDev, твои трудности связаны с тем, что ход твоих мыслей идет в неверном направлении.
    Ты думаешь о цикле, тебе нужно думать о законе. О функции, если говорить простым языком.
    Тебе нужно взять бумагу и нарисовать оси Декартовой системы координат. По одной оси отложи деления твоих "+20 в счете", по другой - деления скорости. Нарисуй в этой системе график зависимости скорости от счета. График даст тебе понимание закона изменения скорости. По этому закону ты можешь вывести функцию зависимости скорости от количества очков. Эту функцию ты можешь использовать для определения фактической скорости в любой момент времени.
    Тебе не нужен цикл, тебе нужно уметь пользоваться математикой.
  • Как отсортировать дробную и целую часть числа в C++?

    @MarkusD Куратор тега C++
    Анатолий Плешков, по аналогии с лексикографическим порядком слов.

    Используй std::modf[?] чтобы разбить число на составные части. Каждая составная часть для тебя будет буквой слова при сравнении.
    Дальше ты можешь вести сравнение между буквами одного порядка так, как это делается при лексикографическом сравнении.
    Например, посмотри как я форматы сортирую по их свойствам. Порядок сортировки там тоже является лексикографическим.
  • Statements внутри списка инициализации конструктора?

    @MarkusD Куратор тега C++
    floppa322,
    statement, indirect - это как раз те англицизмы, переведя которые на русский одним словом, только ухудшит понимание, поэтому я бы не стал это делать

    Я полностью соглашусь с res2001 . Ты не иностранец, у тебя есть Русская речь и Русский язык чтобы выражать свои мысли без языковых надстроек. А так, можно через слово, подобно мату, вставлять что-нибудь иностранное взамен родного слова.
    Но дело, конечно, твое.

    естественно может, просто предпочитаю в ооп-стиле писать )

    Только это не будет ООП-стилем. Концепт объектной ориентированности не запрещает использовать глобальные функции и не принуждает все писать только в методах.
    Если ты действительно предпочитаешь писать в стиле ООП, который оперирует сущностями, то вот подходящий пример:
    class Example
    {
    private:
        ExtremelyHeavyObject obj;
    
    public:
        Example()
        : obj{ ExtremelyHeavyObjectBuilder{}
                 .method1()
                 .method2()
                 .method3()
                 .build() }
      {
      }
    };

    Идиома называется Method chaining [?]. У ее применения есть свои особенности.
  • Statements внутри списка инициализации конструктора?

    @MarkusD Куратор тега C++
    floppa322 , есть несколько предложений по оформлению вопроса. Я, кажется, его как-то понял, но хочу устранить неоднозначности.
    Сегодня использование англиканизмов в профессиональной среде трактуется как признак низкой квалификации. Квалифицированный специалист способен объясняться исключительно терминами родного языка.
    Индирект - косвенность. Statement'ы - выражения.
    Когда человек сыпет тяжелыми на слух англиканизмами, его становится тяжело понять. Это заставляет слушателя напрягаться и нервничать. А это уже ведет к обострению общения и может быть воспринято как неуважение.

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

    По части сложных выражений для инициализации поля. Для инициализации поля ты можешь использовать функции родительского класса (даже методы, т.к. в момент инициализацтора текущего класса, экземпляр родительского класса уже инициализирован), глобальные функции или идиому IILE.
  • Ошибка компиляции для платы Arduino Uno: "CreateFile C:\Temp\arduino_build_357091: The system cannot find the file specified."?

    Алихан Мулаев , прошу повторно ознакомиться с регламентом работы сервиса и устранить нарушения П3.1, П3.4, П3.6 и П3.8 в своем вопросе.
  • Можно ли обратиться к статическому полю шаблона класса без инстанцирования шаблона?

    @MarkusD Куратор тега C++
    floppa322, хочу обратить твое внимание.
    Класс A использует regex и, чтобы написать тест на него и не ctrl + c / ctrl + v regex можно просто доступиться до публичного regex'а класса A в тесте

    "Класс A использует ..." - это уже описание решения. Решение всегда решает задачу и может быть каким угодно если удовлетворяет условиям задачи. Оно может быть неэффективным или вести к долгосрочным последствиям.
    Описывать желательно саму задачу, для решения которой "Класс A использует ...".

    Для чего тебе потребовалось описанное в вопросе поведение?

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

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

    ну и даже с приватными статическими константами хотелоь бы, чтобы на каждый тип шаблона копии переменных не создавались, то есть тут уже речь не идёт о красоте синтаксиса

    В этом случае вариант от Sergio является самым лучшим и чистым решением.
  • Можно ли обратиться к статическому полю шаблона класса без инстанцирования шаблона?

    @MarkusD Куратор тега C++
    floppa322 , шаблон класса - это, прежде всего, шаблон типа. Это еще не тип и работать с шаблоном как с типом невозможно. Шаблон всегда требуется инстанцировать, результатом инстанцирования шаблона типа всегда будет тип, у которого уже можно получить доступ к полям и функциям.

    добавляя "фиктивные" шаблонные параметры как-то слишком костыльно

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

    Расскажи что ты хочешь сделать. Для чего тебе потребовалось описанное в вопросе поведение?
  • Является ли хорошей практикой использование Stack Trace библотек в дебаг сборке?

    @MarkusD Куратор тега C++
    floppa322,
    само наличие блоков try/catch, насколько мне известно, немного замедляет приложение

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

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

    @MarkusD Куратор тега C++
    kokapuk, тебе нужно пример кода прокси? Бесплатно такие масштабные работы обычно не предоставляются. Переходи на фриланс и оформляй задачу.
  • Является ли хорошей практикой использование Stack Trace библотек в дебаг сборке?

    @MarkusD Куратор тега C++
    floppa322,
    Извиняюсь за глупый вопрос, но откуда у пользователя возьмётся корректный стек вызовов?

    Вот эта самая Backward-cpp и ей подобные выдачу коллстека и сделают корректной. Современная инструментация отладки позволяет опознать фрагменты встроенного кода и правильно оформить коллстек для выдачи.

    если приложение чисто серверное, то бояться декомпиляции не стоит?

    Многие погорельцы именно так и думали. Но дело в том, что и серверное ПО тоже можно заполучить себе в руки после взлома сервера. Нет, если ПО чисто серверное, его ровно так же нужно защищать, как будто оно уже отдано пользователю.

    на практике в релизных сборках устанавливают ли колбэки на системные исключения, вроде сегфолта, с последующим выводом стека вызовов?

    На практике уважающее себя ПО в руках пользователя работает под присмотром брокера статистики и отладки. Качественного ПО в наши дни нет. Всякая программа у пользователя упадет. Важность в том, чтобы падение это донести до разработчиков в максимально информативном виде.
    Брокер ведет программу до ее падения. В момент падения брокер перехватывает управление на себя, формирует крашдамп, формирует отправку на сервера разработчиков, уведомляет пользователя о том, что программа упала и разработчики уже в курсе, после чего мирно кладет программу до нового запуска.
    И как же иначе брокер, будучи внутри процесса ПО, может все это выполнить, как не через обработчики сигналов и прерываний? А никак.
    И на производительности конкретно установка обработчиков тоже не сказывается.
  • Является ли хорошей практикой использование Stack Trace библотек в дебаг сборке?

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

    Вектора проблем инструментов подобного уровня ищутся довольно легко. Изучаем инструмент и его пользу, а потом придумываем как злоумышленник может эту пользу обернуть во вред нам.

    Проблем с регистрацией событий нет. Это - штатный функционал стандартной библиотеки. Сегодня довольно много инструментов (вроде GeForce Experience, Logitech G Hub или Realtek Sonic, т.е. вещи все знакомые) для своей работы используют куда более изощренные методы встраивания в исполняемый код процессов пользователя.
  • Как скомпилировать программу через командную строку используя только возможности виндоус?

    Void59,
    хотел переводить

    Этот процесс называется трансляцией.
    В какой язык ты хотел транслировать код своего языка - не важно. Твой вопрос имеет отношение только к трансляции.
    Правильно указанные теги помогают тебе решить свой вопрос. Неправильно указанные теги могут привести к удалению вопроса (по нарушению П3.1 регламента).
  • Header-only. Страдает ли размер бинарника?

    @MarkusD Куратор тега C++
    Sergio, нужно не думать, а знать документацию.

    Чем характерно определение метода по месту его объявления в классе? Тем, что метод автоматически будет иметь спецификатор inline.
    Чем характерно определение шаблонов функции или внешнее определение методов шаблона? Тем, что определение должно быть доступно из всех мест инстанцирования шаблона. Если шаблон функции инстанцируется в разных модулях трансляции, ему место только в одном из заголовков.
    Чем характерно определение функции в заголовке? Тем, что функция должна иметь спецификатор inline или static. Иначе попытка трансляции кода выявит нарушение ODR. Инстанцирование шаблона функции или метода будет помечено как взятое оттуда, где оно определено.

    Спецификатор static[?] дает пометку внутреннего связывания для сущности. Константа или переменная в этом случае будет доступна только из того модуля трансляции, который ей пользуется. Статическая глобальная функция помечается как недоступная для связывания в других модулях трансляции. Статический метод будет все так же иметь внешнее связывание, в чем есть свои проблемы.

    Спецификатор inline[?] дает пометку слабого внешнего связывания для любой сущности. Что константа или глобальная переменная, что функция или метод (даже статический), помечаются как сущности с внешним связыванием, которое не нарушает ODR в случае если все определения цели связывания во всех модулях трансляции являются полностью одинаковыми. Если хоть одно определение цели связывания отличается - будет нарушение ODR.
    Ликер подберет самое первое определение и встроит его в бинарный код. После этого линкер будет только проверять другие встреченные определения на предмет соответствия первому, а линковку кода будет производить только относительно первого встреченного определения.
    Этим и характерна пометка функций, методов или констант с переменными как inline.

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

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

    Думаю, от тебя разъяснения по этим подробностям ждут.
  • Выбор игрового движка для C++?

    @MarkusD Куратор тега C++
    Qwertyue5, много решений подходят под такие критерии. Выбирай. :)
  • Выбор игрового движка для C++?

    @MarkusD Куратор тега C++
    Qwertyue5 , какие критерии у тебя к подходящему движку?
    Изложенное в вопросе больше подходит под критерии твоего окружения, чем под критерии целевого движка.

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

    NSliM, да, такое возможно. На этом уровне, обычно, оформляются детекторы циклов, анализаторы цепочек вложенности и прочие инструменты отладки событийных систем.
    Относительно IoT или АСУ во внимание следует принимать что эти системы являются высококонкурентными и сильно распределенными. Брокер в АСУ не замирает в ожидании завершения события, он только отправляет сообщение о действии в контролер и принимает сообщение о выполнении действия. IoT тоже живет полностью параллельно, брокер там занимается только приемом входящих и генерацией исходящих событий.

    Вообще тебе стоит изучить два базовых архитектурных шаблона для событийных систем: Reactor и Proactor.
    Эти шаблоны проектирования реализуются через шаблоны дизайна, такие как Push/Pull, Observer/Publisher-Subscriber, Command и Pipe. Могут использоваться и другие шаблоны, эти шаблоны я сейчас вперед всего вспоминаю.
    Посмотри на Actor Model как на общую архитектуру реализации событийной системы.
  • Какой паттерн проектирования применяют для построения событийной системы?

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

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