Задать вопрос
  • Зачем нужны пакеты VC++, .NET Framework, Java Runtime, DirectX?

    HungryGary, стал ли данный ответ решением твоего вопроса?
  • Как ограничить FPS в OpenGL и glut?

    @MarkusD Куратор тега C++
    Герман
    UPD: Вопрос решён. Помогла функция glutTimerFunc(), убираем glutPostRedisplay() из idle-функции, создаём таймер с обновлением в 1000/FPS_LIMIT миллисекунд и создаём новый таймер в том таймере, тем самым таймер создаёт другой таймер и так по кругу.

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

    @MarkusD Куратор тега C++
    Quad_Tree, как я вижу, ни один из ответов не подходит под решение твоего вопроса. Предлагаю тебе самому изложить в своем ответе суть решения проблемы и поставит отметку решения. Так другие люди с чем-либо подобным смогут сориентироваться в твоем вопросе.
  • Как сохранить копию string?

    @MarkusD Куратор тега C++
    Quad_Tree, правда, мое решение будет избыточно хранить дубликаты строк.
    Потому я и попросил задание целиком. Такие нюансы стоит знать заранее.
    В таком случае использовать лучше даже не std::vector<std::string>, а std::set<std::string> и все те же две
    std::unordered_map<std::string_view, std::string_view>
    . Set позаботится о том, чтобы хранить только уникальные строки. У std::set, кстати, тоже есть функция emplace.
  • Как сохранить копию string?

    @MarkusD Куратор тега C++
    Quad_Tree, по твоему заданию ассоциативный контейнер - это правильно, но только не std::map, а std::unordered_nap. Тебе стоит самостоятельно понять принципиальную разницу этих контейнеров и почему первый в твоей задаче непригоден.
    Тебе надо сделать два поля одинакового типа: std::unordered_map<std::string, std::string>. Первый контейнер хранит прямой перевод, второй - обратный перевод. Контейнеров два т.к. слова в разных языках могут писаться одинаково, а значения у них могут быть разные и переводы, следовательно, тоже разные.
    Заносить строки в контейнеры надо через функцию emplace. Изучи документацию и найди для себя обоснование - почему именно эта функция будет эффективнее всего работать с парой std::string_view в качестве параметров.
    Обоснование использования std::string в качестве параметров шаблона std::unordered_nap таково, что TranslateForward возвращает std::string_view, который не владеет памятью на которую ссылается. Вместе с этим, тип std::string_view не рассматривается как тип долгосрочного хранения (рассматривать его как долгосрочное хранилище - в большинстве случаев опасно). Такая сигнатура требует от Translator владеть памятью строк возвращаемых из функций Translate*.
  • Как сохранить копию string?

    @MarkusD Куратор тега C++
    Quad_Tree
    В самой задаче использование string_view оправдано экономией памяти.

    Не оправдано, т.к. для сохранения строки в своем контейнере ты сейчас делаешь два выделения памяти на каждый параметр.
    Translator::Add(string("first"), string("second")) - первое выделение делается вот тут. Зачем?
    data.emplace_back(first) - второе выделение делается вот тут и ниже во втором emplace_back.

    Выпиши в теле вопроса под спойлером текст задания.
  • OpenGL не сразу отображает данные из кадрового буфера?

    @MarkusD Куратор тега C++
    Герман, пожалуйста, конеч. А что, решением мой ответ для тебя не является? :)
  • Как сохранить копию string?

    @MarkusD Куратор тега C++
    Quad_Tree , какую задачу решает std::string_view в качестве типа параметров твоей функции?
    Может ли эту задачу с большим успехом решить какой-либо другой тип?
  • Как создать массив списков C++?

    @MarkusD Куратор тега C++
    fachel32, тебе надо единожды задать длину списка или длина может варьироваться в процессе исполнения программы?
  • OpenGL не сразу отображает данные из кадрового буфера?

    @MarkusD Куратор тега C++
    Герман, так а у тебя там проблема с логикой.
    Окно у тебя перерисовывается раз в секунду. Это стоило бы стразу подметить.
    А перерисовывается оно у тебя так потому что ты неправильным образом и в неправильном месте указал рандомизацию.
    srand((unsigned)time(NULL)); - в течении секунды твое зерно будет одинаковым, а следовательно и все нарисованные точки тоже будут одинаковыми. Функция time возвращает текущее количество секунд в UTC формате. Тебе не стоило писать эту строчку в displayFunction, тебе стоило написать ее в main точно перед glutInit.
    А вызов glutPostRedisplay внутри idle-функции - это правильно, так в GLUT и поступает запрос на перерисовку кадра.
  • Как передать файл для записи в пользовательскую функцию C++?

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

    Что мне надо сделать? - Отрыть файл.
    Какой файл открыть? - Значит или путь файла известен внутри функции, или передается параметром.
    Для чего открыть файл: для записи или для чтения? - Видимо или функция должна своими именем об этом говорить, или режим работы с файлом надо передавать параметром.
    А что делать с дескриптором открытого в функции файла? - Возвращать, пожалуй.
    А что если файл не удалось открыть? - Наверное надо предусмотреть обработку ошибок и возвращать недействительный дескриптор файла.
    Зачем мне нужен дескриптор открытого файла? - Чтобы считать оттуда что-либо или записать туда что-либо.
    Что мне надо сделать чтобы считать из файла что-либо? - ...
    Что мне надо сделать чтобы записать в файл что-либо? - ...
    Что мне делать с дескриптором открытого файла когда он больше не нужен? - ...

    В общем, рассуждай о том, что тебе надо сделать: ставь задачи и ищи решения.
    Посмотри как другие люди решали те задачи, которые ты себе ставишь. (например)
  • Как передать файл для записи в пользовательскую функцию C++?

    @MarkusD Куратор тега C++
    Дмитрий
    Но вот вынести в отдельные функции Создание файла, Запись данных и Считывание данных не могу.

    Расскажи, что именно тебе непонятно. Покажи примеры своих попыток это сделать и поясни почему эти попытки не приводят к нужному тебе результату.
  • C# или C++, что выбрать со связкой с Python'ом?

    frontjss, что-то я не пойму, какая же все таки связка с языком подразумевается.
    Тут, понимаешь, то что ты описываешь и через расширение питона делается, и через IronPython тоже, и через Python .NET точно так же делается. "Расширение возможностей" - это каких? Это расширение через модуль питона? Или это расширение для C++ через Iron/Stackless Python? Или это расширение для C# через Python .NET?
    В твоем вопросе остро нехватает конкретики. Без конкретики не получится дать тебе хороший совет, который действительно поможет тебе решить задачу.
  • C# или C++, что выбрать со связкой с Python'ом?

    Какая именно связка с питоном подразумевается?
  • OpenGL не сразу отображает данные из кадрового буфера?

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

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

    @MarkusD Куратор тега C++
    lion221133, А яж тебе написал код, в котором происходит вызов функций.
    Когда ты пишешь A B();, то ты не переменную B с типом A декларируешь, не что-то там еще. Ты декларируешь функцию B, которая не принимает никаких аргументов, но по значению возвращает объекта типа A.
    Таков синтаксис языка. Ты написал void logic(); - значит ты декларируешь функцию без входных аргументов и возвращаемого значения.
    Вызов функции производится иным синтаксисом. В этом синтаксисе используется только имя функции и оператор вызова с передачей параметров - logic();.
  • В int main не воспринимается нормально void, а может просто я тупой?

    @MarkusD Куратор тега C++
    int main()
    {
    for (int i = 0; i < 1;)
    {
    logic();
    DrawPoint();
    DrawPixel();
    }
    return 0;
    }

    Все дело в том, что твой текст просто лишний раз делает упреждающее объявление функций, а не вызывает их.
  • Почему send позволяет отправлять little-endian данные?

    @MarkusD Куратор тега C++
    sddvxd
    Даже набор русских букв в оперативной памяти на разных процессорах будет выглядеть по -разному

    Не на разных процессорах, а в разных кодировках. В 1251, скажем, это будет все тот же 1 байт на символ. А в Unicode - уже от 2 байт. И, снова, UTF-8 - это не представление символа в виде целого числа, это представление символа в виде многобайтового кода, элементы которого должны всегда следовать в одном порядке.
    А вот с UCS-2 все уже очень туманно . Вроде как RFC предписывает BE, но на практике представление UCS-2 подчиняется организации порядка оси. Соответственно, UTF-16 уже будет являться кодом из 16-битных элементов, каждый из которых будет подчиняться порядку байт оси.
  • Какие есть C++ библиотеки для логирования в формате JSON?

    @MarkusD Куратор тега C++
    Иван Филатов, да. Я немного неправильно пишу, я привык эту сущность называть принтером, т.к. она отвечает за преобразование внутреннего представления лога во внешнее. Конечно эту сущность еще можно назвать форматером или билдером.
    Вот пример такой сущности для Easylogging: https://github.com/zuhd-org/easyloggingpp/blob/mas...

    И, да, принтеры можно настраивать никак не меняя код приложения. Принтер, как в том же примере Easylogging, прикрепляется к категории, или на все категории, во время конфигурирования библиотеки.