• Как преобразовать string к wstring?

    @MarkusD Куратор тега C++
    CodeInside , покажи содержимое своей std::string в виде строки из отладчика и в виде hex byte stream вроде "D0BFD180D0B8D0B2D0B5D182".
  • На чем писать сервер для игры?

    Bloodskys , такие вопросы обычно остаются без решений и вообще являются риторическими, поэтому коммент, а не ответ.

    2КБ/сек - это нисколько даже на одного игрока. Точные данные для примера - клиент RO получал около 1МБ трафика в час, т.е. порядка 17КБ в секунду. И это был крайне экономичный протокол. Сейчас есть куда прожорливее примеры.

    Для сервера хорошо подходит C#, особенно если умеешь конкурентность и параллелизм. Если знаком с микроядерной архитектурой и архитектурой сервисов/микросервисов, то на C# вполне получится создать горизонтально расширяемый сервер с поддержкой сотен тысяч пользователей в онлайне. Разработка на C# значительно быстрее чем на C/C++, а номинальная надежность кода значительно выше чем в C/C++. Быстродействие достигается горизонтальным расширением и параллелизмом, чего в C# добиться значительно проще чем во все тех же C/C++.
    C/C++ - это инструмент для совсем других целей.
  • Сложная бизнес-логика. Как всё учесть?

    GLeBaTi , сервер state-less чтоли?
    От части nirvimel говорит правильно. Но его слова - это лишь вершина айсберга. Дальше, чтобы понять проблему и дать точное решение, тебе придется нарушить NDA (или мне придется его подписать) и рассказать мне все тонкости организации сервера. Только я не могу этим всем заниматься. :)

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

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

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

    Сергей , почитай про бинарную кучу (Binary Heap / Priority Queue).
    Это куча на линейном списке, всегда гарантирующая изъятие самого приоритетного элемента со своей вершины, вне зависимости от того, насколько давно элемент попал в нее.

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

    Я не оформляю рекомендацию как ответ т.к. не считаю что это тебе на 100% подойдет. Но этот примитив может помочь тебе думать в нужном направлении.
  • Структура данных типа очереди, позволяющая быстро определить позицию элемента. Есть?

    Сергей , а что означает: "по элементу определить номер его позиции"?
    Чтобы найти нужный инструмент, неплохо бы сперва представить себе его во всех красотах.

    Какая цель перемещения элементов? А для чего нужно знание позиции? Всегда ли удаление происходит только из головы? Всегда ли добавление происходит в хвост?
    Нужно ли выбранный элемент перемещать в сторону хвоста? Или перемещать нужно только в сторону головы?
    Элементы в контейнере уникальны или имеются дубликаты? По ссылке ли хранятся элементы или по значению? Две разные инстанции элемента с одинаковым контентом будут разными или одинаковыми?

    Пока на примете только бинарная куча и интрузивный лист. Но они оба могут не подойти тебе в зависимости от ответов на вопросы выше.
  • Матрицы и выполнение собственных операций с матрицами в OpenGL?

    @MarkusD Куратор тега C++
    Toonas , дерзай. :)
    Линейная алгебра и Аналитическая геометрия - безумно интересные науки! Тебе понравятся.
    А потом, как закончишь хороший универ, буду ждать тебя в рядах игровых программистов. :)
  • В чем суть данной конструкции?

    @MarkusD Куратор тега C++
    Vitaly , это называется:
    // Happy debugging, suckers!
    #define true false
  • Матрицы и выполнение собственных операций с матрицами в OpenGL?

    @MarkusD Куратор тега C++
    Toonas , как непривычно в наше время встретить человека незнакомого с линейной алгеброй. :)
    Да, для понимания матриц и аффинных преобразований тебе стоит взять учебник по "линейке", да потолще, и впитать его в себя.

    Это не ответ конкретно на твой вопрос, это моя рекомендация в общем. Разбирая линейку, думай о 3D, тогда тебе понравится.
  • Как реализовать кроссплатформенное ПО с библиотеками для Windows/Linux?

    @MarkusD Куратор тега C++
    WayMax , у меня "platform" является только одной из подсистем и планомерно подключается, на ряду с остальным подсистемами, в мастер-заголовке библиотеки. Платформенный код является сервисным для всего остального кода.

    Для тебя, из приведенного тобой примера, я бы сформировал такие включения.
    /// @file	platform/platform.h
    // ...
    
    // lookup include directories.
    #if( BUILD_PLATFORM_WINDOWS_DESKTOP )
    	#include <platform.windows/platform.windows.h>
    #elif( BUILD_PLATFORM_ANDROID )
    	#include <platform.windows/platform.android.h>
    #else
    	#error Unknown platform.
    #endif
    
    // lookup local 'platform' directory.
    #include "File.h"
    // ...
    
    /// @file	platform.windows/platform.windows.h
    // ...
    
    // lookup local 'platform.windows' directory.
    #include "PlatformSpecificFile.h"
    // ...
    
    /// @file	somewhere/in/your/api/file.h
    // ...
    #include <platform/platform/h>
    
    // ...
    File my_file{ file_name, OpeningMode::CreateAlways, AccessOptions::Read, SharingOptions::Read };
    // ...


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

    Я не работаю в Qt, я предпочитаю MSVS. В проекте студии можно поставить игнор на компиляцию файла в строго оговоренной конфигурации проекта. Этим я пользуюсь для того, чтобы содержать ровно один проект как для сборки консольного приложения, так и для оконного или динамической библиотеки.
    Функции main, WinMain и DllMain лежат в разных файлах, которые включаются в сборку проекта только в нужной конфигурации проекта.
    По хорошему, Qt тоже должен так уметь.
  • Как реализовать кроссплатформенное ПО с библиотеками для Windows/Linux?

    @MarkusD Куратор тега C++
    Добавил к ответу пример расщепления класса файла.
  • Как реализовать кроссплатформенное ПО с библиотеками для Windows/Linux?

    @MarkusD Куратор тега C++
    WayMax , возможно тебе и два проекта библиотек для двух платформ не нужны. Насколько я сейчас понимаю ход твоих мыслей, ты хочешь сделать 3 проекта: один проект GUI для всех платформ и два проекта DLL, по одному для конкретной платформы.

    Только проекта DLL тоже хватит одного, т.е. тебе на самом деле нужны только два связанных Qt проекта - это GUI и API.
    API ты можешь перестроить по описанному мной способу, в результате из одного Qt проекта на разных платформах будет собираться нужный вариант API.
  • Как реализовать кроссплатформенное ПО с библиотеками для Windows/Linux?

    @MarkusD Куратор тега C++
    WayMax , Вот сча прочитал твой коммент к Дмитрий , надеюсь что на мой вопрос о надобности динамической линковки ты не станешь так же реагировать. :)
    Иными словами, у тебя уже есть код и тебе хочется меньшей кровью провести экспансию этого кода на другие платформы?
  • Как реализовать кроссплатформенное ПО с библиотеками для Windows/Linux?

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

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

    Иными словами, не стоит быть таким категоричным. :)
  • Как правильно извлечь числа из битового поля?

    @MarkusD Куратор тега C++
    SibVektor , опять же, все зависит от типов, используемых в объединении. Я очень активно использую такие вещи в форматах файлов и при хранении состояний/статусов/флагов сущностей. Главное - это не испортить разметку битового поля. Для этого тебе в помощь вот такая статья: https://habrahabr.ru/post/142662/
  • Как правильно извлечь числа из битового поля?

    @MarkusD Куратор тега C++
    SibVektor , все зависит от типа значений в объединении. Какой именно код выдает тебе 255 вместо -1?
  • Как используются константы и кастинги?

    Геворг , https://github.com/isocpp/CppCoreGuidelines/blob/m...
    Любое число/строковой литерал или булево значение, напрямую подставленное в коде никак не раскрывает смысла самой подстановки.
    Более того, если в нескольких строчках одной функции ты видишь одно и то же число, скажем 0 или 42, один ли смысл оно имеет во всех этих местах? А если это число надо изменить, то во скольких местах его надо изменить? Во всех или только в одном? Или в двух из 5, в каких именно?

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

    Я советую для самостоятельного ответа на твои вопросы сперва прочитать книгу Дастина Босуелла "Читаемый код или Программирование как искусство".
  • Как определить случайное взятие ASCII-символов?

    @MarkusD Куратор тега C++
    kenny182 , а "оооочень большой" размер - это сколько? Больше 2Мб но меньше 10?
    Ок, маска ASCII таблицы - 0x80, если байт не маскируется, то его можно считать печатаемым в ASCII. Только как ты бинарные данные отличишь от текстовых с помощью этой маски?
  • Подходит ли python для создания GUI бота для MMORPG игр?

    ForSer , для питона приоритеты пунктов в обратном порядке.
    Бот для сапера для начала.

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