Приглашаю Си/Си++ программистов присоединиться к блогу PVS-Studio. Вы узнаете о разных интересных вещах из мира Си/Си++ и о том, кто, где и как программирует. Расскажу немного о том, что не было опубликовано на Хабре за время нашего отсутствия здесь.
Читать полностью »
Рубрика «c++11» - 14
Единорог вновь готов к общению с Си++ программистами
2013-05-08 в 6:25, admin, рубрики: c plus plus, c++, c++11, pvs-studio, Блог компании PVS-Studio, Си, си плюс плюс, си программирование, метки: c plus plus, c++, c++11, pvs-studio, Си, си плюс плюс, си программированиеНаписание многопоточных приложений для магазина Windows с помощью Intel Threading Building Blocks — теперь с DLL
2013-04-10 в 4:33, admin, рубрики: c++, c++ библиотеки, c++11, intel parallel studio, intel tbb, intel threading building blocks, tbb, Visual Studio, Блог компании Intel, параллельное программирование, метки: c++, c++ библиотеки, c++11, intel parallel studio, intel tbb, intel threading building blocks, tbbЭта статья описывает, как построить простое приложение для магазина Windows используя Intel® Threading Building Blocks (Intel® TBB).
Мой предыдущий пост Windows 8: Написание многопоточных приложений для магазина Windows с помощью Intel® Threading Building Blocks описывает экспериментальную поддержку для приложений для магазина Windows. Обновление 3 для Intel TBB 4.1, так же как стабильный релиз tbb41_20130314oss содержит динамические библиотеки для таких приложений.
Читать полностью »
Move semantics в C++11 и STL-контейнеры
2013-03-23 в 18:31, admin, рубрики: c++, c++0x, c++11, move semantics, STL containers, метки: c++0x, c++11, move semantics, STL containers Эта небольшая заметка о том, как с приходом нового стандарта C++11 изменились требования стандартных контейнеров к своим элементам. В C++98 от элемента контейнера требовалось, по сути, наличие «разумных» конструктора копирования и оператора присваивания. Если, например, объект вашего класса владеет каким-либо ресурсом, копирование обычно становится невозможным (по крайней мере, без «глубокого» копирования ресурса). В качестве примера давайте рассмотрим следующий класс-обертку вокруг FILE*
, написанную на C++98:
class File
{
FILE* handle;
public:
File(const char* filename) {
if ( !(handle = fopen(filename, "r")) )
throw std::runtime_error("blah blah blah");
}
~File() { if (handle) fclose(handle); }
// ...
private:
File(const File&); //запретить копирование
void operator=(const File&); //запретить присваивание
};
RAII + С++ variadic templates = win
2013-03-14 в 19:31, admin, рубрики: c++, c++11, raii, variadic, метки: c++, c++11, raii, variadic Недавно пристально посмотрел на С++ Variadic Templates и неожиданно для себя изобрел новый RAII Scoped Resource Manager.
Получилось кратко и эффектно.
Например, с C-style выделением памяти:
// Аллоцируем ресурс в блоке.
{
ha::scoped_resource<void*, size_t> mem(::malloc, 1, ::free);
::memset(mem, 65, 1);
}
Соединяем Qt-сигнал с простой функцией и лямбда
2013-03-06 в 12:47, admin, рубрики: c++, c++11, qt, Qt Software, метки: c++11, Qt, qt softwareУ многих программистов, работающих с Qt, наверняка возникало навязчивое желание соединить сигнал, посылаемый неким наследником QObject, c простой функцией, не являющейся слотом или даже членом некоторого класса. Однако если весь проект построен на объектах (как обычно и бывает), да и все они наследуются от QObject, то добавить функцию-слот куда надо не составит труда. А если нет? Если вы, например, из экономии памяти (или по другим соображениям) не хотите наследовать ваш класс от QObject, или же действие слота занимает всего 1 строчку и было бы проще и удобнее написать его в виде лямбда-выражения? Или вы по ряду причин хотите по сигналу вызывать одиночную фунцию, не являющуюся членом класса?
Столкнувшись с этой проблемой, я решил написать класс, который позволяет соединять сигнал не только с функцей-слотом, а ещё и с самой обычной функцией, а при поддержке С++11 — ещё и с лямбда-выражением.
Читать полностью »
Boost Signals — сигналы и слоты для C++
2013-03-03 в 22:01, admin, рубрики: boost, c++, c++11, signals, С++, метки: boost, c++11, signals, С++
О чем эта статья
Сегодня я расскажу про библиотеку Boost Signals — про сигналы, слоты, соединения, и как их использовать.
Сигнал — это тип данных, который может хранить в себе несколько функций обратного вызова, и вызывать их.
Слот — это, соответственно, и есть подсоединяемые к сигналу функции.
Как уже было сказано, к одному сигналу можно подключить несколько функции, и при вызове сигнала, подключенные функции вызываются в порядке их подключения.
Похожую систему иногда называют событийной, тогда сигналы — это события, а слоты — это подписанные на определенные события обработчики.
Привязка свойств и декларативный синтаксис в C++
2013-03-03 в 18:59, admin, рубрики: c++, c++11, QML, qt, Qt 5, qt quick, Qt Software, Программирование QtQuick и QML образуют по-настоящему хороший язык для разработки пользовательских интерфейсов. Привязки QML очень производительны и удобны. Декларативный синтаксис действительно приятен в работе. Возможно ли сделать то же самое на C++? В этом посте я покажу рабочую реализацию привязки свойств на чистом C++.
Внимание: это было сделано для забавы, а не для использования в реальном проекте.
Читать полностью »