Рубрика «c++» - 243

Писать на C++ расширения для PHP приходится не так чтобы очень часто, но когда приходится — обнаруживается, что публикаций и документации на эту тему не так уж и много. Особенно, если копнуть поглубже. Опишу несколько интересных моментов, которые мне пришлось выяснять «на своей шкуре».

Неожиданные сложности подстерегают нас при вызове из кода расширения (которое, напомню, мы пишем на C++) PHP-функций. Для этого предусмотрена функция call_user_function_ex, пример использования которой найти не так уж сложно; проблемы возникают, если вынести ее вызов из C++'ной функции, которая вызывается из PHP. Объявляются такие функции следующим образом:

ZEND_FUNCTION(MyFunction) { … }

После вынесения вызова call_user_function_ex за ее пределы, наше расширение перестает компилироваться.
Разгадка (и решение проблемы) кроются, конечно же, в определении макроса ZEND_FUNCTION, который добавляет к определению функции пару параметров. Нам ничего не остается, кроме как передать их той функции, откуда мы хотим обратиться к PHP. Выглядеть это будет так:
Читать полностью »

1. Постановка задачи

Полный взвешенный граф из 500 вершин задан матрицей смежности.
Необходимо найти гамильтонов цикл в этом графе как можно меньшей суммарной стоимости.
Читать полностью »

в 21:04, , рубрики: c++

Хочу представить или даже напомнить о таком замечательном модуле Boost как multi_index_container. Все мы знаем и интенсивно пользуем стандартные STL классы для хранения и доступа к данным как списки, векторы, мапы?, хеши. Про них сказано уже немало и исследованы все особенности их применений.

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

Конечно всё уже придуманно до нас и в библиотеке Boost уже есть модуль для решения данных проблем — boost::multi_index. Огромное преимущество — скорость, multi_index очень быстрый. Однако документация этого модуля скажем сложна для понимания и новички стараются обходить этот модуль стороной. И конечно отдельно можно сказать о сообщениях компилятора при ошибках при работе с multi_index_container — разобрать длинные сообщение о шаблонах не каждому под силу.

Постараемся ликвидировать этот пробел и показать простые примеры для горячего старта и использования этого мощного инструмента. Буду пользовать немного вместе с Qt в примерах. (Как раз в Qt с их собственной системой шаблонов мне часто не хватает примитива сравнимого с multi_index)
Читать полностью »

в 21:26, , рубрики: c++, Программирование, метки:

Предистория

Советы по C++
За 2 года, я прочитал очень много книг по C++. Лучшим вариантом запоминания информации считаю ведение конспектов.
Несколько дней назад я остался без компьютера и интернета. Чтобы не тратить время впустую решил пересмотреть все свои записи. В тот момент ко мне и пришла идея сервиса, о котором я расскажу ниже.
Читать полностью »

Классы std::function и boost::function являются высокоуровневыми обертками над функциями и функциональными объектами. Объекты таких классов позволяют хранить и вызывать функции и функторы с заданной сигнатурой, что бывает удобно, например, при создании callback вызовов (например, мы можем регистрировать несколько обработчиков, и это могут быть как обычные функции, так и объекты с определенным оператором =)

Если вам интересно, каким образом реализуется данный функционал, то прошу под кат
Читать полностью »

image
Так как это мой первый пост, то расскажу что уже довольно долго занимаюсь программированием игр на C++. Иной раз, окинув взглядом мое творение, я ужасаюсь. Виной тому шаблонное программирование — настолько запутанное и уродливое. Но, может существует более правильный и красивый путь? Многие пытаются ответить на этот вопрос и ищут альтернативу C++ в области «generic programming»… Я к примеру, перепробовала C#, Java, Python, JavaScript. Уже было решила писать на Lisp'е с его CLOS моделью, но тут я наткнулась на язык D, о нем и пойдет речь под катом.
Читать полностью »

Как известно, в программном интерфейсе приложений для магазина Windows (Windows Store apps) отсутствуют многие функции работы с потоками, начиная с CreateThread() и заканчивая работой с TLS ключами. И это отличный повод перейти от параллелизма, основанного на системно-зависимых потоках к параллелизму, основанному на задачах. Данный пост излагает пошаговую инструкцию о том, как написать простейший многопоточный пример, который проходит аттестацию для магазина Windows (Windows App Certification Kit validation) и, гипотетически, может быть масштабирован до игрушек космического масштаба. А поскольку используется кроссплатформенная библиотека Intel® Threading Building Blocks (Intel® TBB, TBB, threadingbuildingblocks.org), то вычислительная часть может быть легко перенесена на другие платформы, и задача будет заключаться только в том, чтобы нарисовать новый красивый графический интерфейс.
Читать полностью »

Танковые маневры на Russian AI Cup

Небольшая история про участие в одном из IT-конкурсов Mail.ru group.

Читать полностью »

Статья предназначена для разработчиков под Android NDK, которые собираются работать с замечательной библиотекой libcURL и иметь в своем распоряжении ее исходники для пересборки в статическую библиотеку. Автор не претендует на абсолютно правильное решение проблемы портирования данной библиотеки, а только лишь делится своим опытом.

Всех заинтересовавшихся прошу под кат.
Читать полностью »

Уважаемое сообщество, представляю вашему вниманию отчет о проделанной работе по скрещиванию моих двух хобби: горный велосипед и микроэлектроника.

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

image
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js