Windows принято не любить. Однако, зачастую, фраза: «Книгу писателя не читал, но осуждаю» очень хорошо описывает эту ситуацию. Несмотря на укоренившееся презрение к «Винде», отдельные вещи в ней реализованы весьма удачно, и именно об одной из них мы хотели бы написать. Отдельные фрагменты WinAPI, хотя и были реализованы достаточно давно, по разным причинам, и часто незаслуженно, выпали из поля зрения широкой аудитории.
В этой статье речь пойдёт о встроенной в ОС реализации lock-free стека и сравнении его производительности с кросс-платформенными аналогами.
Читать полностью »
Метка «boost»
Lock-free стек для Windows
2014-05-20 в 14:52, admin, рубрики: boost, c++, lock-free, windows, Программирование, метки: boost, c++, lock-free, windowsИменованные параметры Boost
2014-02-18 в 10:41, admin, рубрики: boost, c++, параметры, Программирование, функции, метки: boost, параметры, функцииВременами от C++ хочется более гибкого механизма параметризации функций. Например, есть у нас функция с двумя обязательными параметрами и большим количеством необязательных.
bool foo(int important, int& pOut, int sometimes = 1, int occasionally = 2, int rarely = 3)
{
//...
}
Проблемы здесь могут быть следующие
- Пользователи постоянно путают порядок параметров, тип их практически полностью совпадает, поэтому компилятор ничем помочь не может (разве что иногда со вторым параметром).
- Из необязательных параметров чаще всего нужен один, причем если это не sometimes, пользователи вынуждены вспоминать значения по умолчанию, чтобы задать их в вызове явно. Значения по умолчанию разные, так что ошибок снова много
- Нет никакой возможности выразить зависимость значений по умолчанию одних параметров от других.
Проблемы эти можно решить по-разному: передавать в качестве параметра структуру, использовать перегрузку функций или даже функции с разными именами… Boost предлагает еще один вариант решения.
Читать полностью »
Маскируем класс под граф Boost. Часть 3: Находим путь
2014-02-17 в 11:20, admin, рубрики: astar, boost, boost.graph, c++, graph_traits, граф, кратчайший путь, поиск пути, Программирование, метки: astar, boost, boost.graph, graph_traits, граф, кратчайший путь, поиск пути
Пролог: Концепции Boost
Часть 1: Подключение ассоциированных типов без вмешательства в интерфейс исходного класса
Часть 2: Завершаем реализацию поддержки концепций
В прошлых статьях цикла описывался процесс адаптации класса клеточного игрового поля под концепции графов boost. Сейчас рассмотрим собственно то, ради чего все затевалось — поиск пути на клеточном поле. Реализация поиска boost позволяет достаточно тонко настраивать алгоритм, в этой статье будет приведет только один пример такой параметризации — возможность задавать различную длину ребер графа.
Читать полностью »
Маскируем класс под граф Boost. Часть 2: Завершаем реализацию поддержки концепций
2014-02-10 в 22:34, admin, рубрики: astar, boost, boost.graph, c++, graph_traits, граф, кратчайший путь, поиск пути, Программирование, метки: astar, boost, boost.graph, graph_traits, граф, кратчайший путь, поиск пути
Пролог: Концепции Boost
Часть 1: Подключение ассоциированных типов без вмешательства в интерфейс исходного класса
Кратко напомню задачу. Есть двумерное игровое поле из клеток, часть из которых свободна, а часть занята. Требуется найти путь по свободным клеткам из одной позиции поля в другую. Алгоритм поиска пути реализован в Boost. Но он требует, чтобы наше поле подходило под определение графа. Точнее класс должен удовлетворять двум концепциям — boost::VertexListGraph и boost:: IncidenceGraph. При этом интерфейс игрового поля менять не хочется — для всего остального проекта это не граф и графом никогда не станет.
В прошлой части было рассмотрено подключение внешних ассоциированных типов, необходимых для интерпретации класса как boost-графа. Конечно, одних типов недостаточно. Также требуется реализовать несколько функций с заданной сигнатурой и итераторов, с помощью которых библиотека сможет манипулировать игровым полем как графом.
Читать полностью »
Маскируем класс под граф Boost. Часть 1: Не трогаем интерфейс
2014-02-06 в 9:27, admin, рубрики: astar, boost, boost.graph, c++, graph_traits, граф, кратчайший путь, поиск пути, Программирование, метки: astar, boost, boost.graph, graph_traits, граф, кратчайший путь, поиск пути
Потребовалось недавно алгоритм поиска пути для нашей игры переделать. Прошлый был полностью самописный — шаг в сторону, и все плохо… Захотелось взять готовый из хорошего источника. Тут-то и вспомнилось, что в boost есть функциональность для работы с графами. К сожалению подход, «найди функцию, вызови — и все заработает» не состоялся. Упор в библиотеке сделан на максимальную гибкость использования, что негативно сказалось на простоте. В то же время и ничего смертельного — все лучше, чем с нуля делать (и потом исправлять). С другими библиотеками тоже связываться желания не было, в то время как boost в проекте используется давно…
Читать полностью »
Концепции Boost
2014-01-30 в 13:15, admin, рубрики: assert, boost, c++, concept, template, обобщённое программирование, Программирование, метки: assert, boost, concept, template, обобщённое программированиеОт использования шаблонов в С++ лично меня всегда отпугивало отсутствие стандартных механизмов задания ограничений параметров. Другими словами, когда разработчик пишет функцию
template <class T>
bool someFunc(T t)
{
if (t.someCheck()) {
t.someAction(0);
}
}
он делает различные допущения относительно функциональности объектов типа T, однако не имеет стандартной возможности донести их до пользователей. Так приведенный пример предполагает, как минимум, следующее
Читать полностью »
Хочется на полную начать использовать новый стандарт, но, поскольку, работается сейчас под Windows, на 10 студии(и неизвестно, когда перейду на новую) + новый стандарт много чего позаимствовал в Boost + Boost это большая и серьёзная библиотека + все крутые дядьки, которые внесли не малую долю в развитие C++ советуют ознакомиться с Boost — в общем, думаю, не плохо для начала начать «серьёзно» использовать тот же Boost.
Всё с чем мне приходилось сталкиваться до сегодня — это Smart Pointers
(в некоторой степени) и Program_options
.
Так вот — в чём суть вопроса:
Читать полностью »
C++ трюки и советы из Boost на каждый день
2013-12-19 в 16:57, admin, рубрики: boost, c++, c++11, Программирование, метки: boost, c++, c++11
В недавнем постее проголосовали за то, чтобы главы из книги были переведены на русский. Немного подумав я решил схитрить, и вместо перевода глав из открытого доступа, рассказать о том, что есть в закрытых.
Дабы не нарушать прав издательства, это будет не дословный перевод, а выжимка из тех техник, что могут показаться интересными даже людям не работающим с Boost.
Что вас ждёт под катом:
- Избегаем вызовов макросов вместо функций, на примере max/min.
- Вызываем оптимальную функцию, на примере std::swap и её специализации в разных пространствах имен.
- Ускоряем вставку в std::vector.
- Деструкторы в C++11.
Пишем свою книгу
2013-10-01 в 20:36, admin, рубрики: boost, c++, diy или сделай сам, книги, пишем сами, Программирование, с++11, электронные книги, метки: boost, c++, книги, пишем сами, с++11 В данной статье я поделюсь информацией о том, как написать свою IT-книгу. Расскажу о подводных камнях, взаимодействии с издательским агентством, налоговой и банками. Процесс может немного варьироваться от издательства (и страны), но основные моменты не должны меняться.
Читать полностью »
Отказываемся от шаблонных шаблонных параметров
2013-08-28 в 10:55, admin, рубрики: boost, c++, mpl, метки: boost, c++, mpl Использовать шаблонные шаблонные параметры С++ довольно сложно. Хочу продемонстрировать силу boost::mpl и показать трюк, позволяющий описывать шаблоны, полностью отказавшись от шаблонных шаблонных параметров.
Продемонстрирую проблему. Есть класс, принимающий тип объекта и тип контейнера для этого объекта.
template <typename T, typename Container>
struct A
{
typedef Container<T> type;
};
Так писать нельзя, вы должны использовать шаблонные шаблонные параметры, чтобы указать, что Container
сам по себе является шаблоном.
Читать полностью »