Обновить
176.26

C++ *

Типизированный язык программирования

Сначала показывать
Порог рейтинга
Уровень сложности

Подробности о разработке для GPU в Visual Studio и платформе C++ AMP

Время на прочтение2 мин
Охват и читатели2K
Все большую популярность и актуальность приобретают технологии разработки приложений, которые на полную мощность используют вычислительные ресурсы графических ускорителей (GPU). Сегодня практически каждый компьютер и ноутбук комплектуется графическим адаптером с огромными вычислительными мощностями, которые потенциально могут быть использованы приложениями для значительного ускорения вычислений.

Одним из последних результатов исследований компании Microsoft в рамках вычислений в гетерогенной среде (связка CPU+GPU) стал анонс платформы С++ AMP, которая позволяет полностью утилизировать все возможности современных многоядерных процессоров и GPU. Анонс платформы был произведен на конференции AMD Fusion’11 летом этого года, подробности об этом вы можете прочитать в этой записи блога. На этом же мероприятии были анонсированы встроенные средства отладки и профилирования GPU кода в следующем поколении Visual Studio. Подробные доклады по новой платформе так же были прочитаны в рамках конференции BUILD, которая прошла совсем недавно.

Читать дальше →

Ставим объекты на поток, паттерн фабрика объектов

Время на прочтение12 мин
Охват и читатели96K
Доброго времени суток, читатель. Я хочу поделится с тобой знаниями об одном из наиболее часто используемых мною паттернов — фабрики объектов, для данного паттерна так же подходит другое название — виртуальный конструктор.

Что представляет из себя этот паттерн?

Исходя из названия легко догадаться, что это некая, определенная, фабрика (или завод), который создает объекты. Еще раз выражу слово определенная. Как и в реальной жизни фабрика имеет некую специализацию, создавая товары или устройства какого-либо определенного типа. И фабрика, которая выпускает, например, мебель, не может производить, например, еще и компоненты для смартфонов. По аналогии с программированием фабрика объектов может создавать только объекты определенного типа, которые используют единый интерфейс. Самыми главными преимуществами данного паттерна в С++, является упрощение создания объектов различных классов, использующих единый интерфейс. Зачастую библиотекам, которые разрабатывают программисты нужно не только уметь работать с определенными объектами, но и создавать их. Самый очевидный пример загрузка файлов различных форматов. Мы не знаем, какой файл мы будем загружать заранее, но у нас есть список возможных форматов. Пользователь указывает файл, библиотека пытается определить тип файла и вызвать соответствующий загрузчик для него. В большинстве случаев программисты использует конструкции типа switch или if, чтобы определить экземпляр какого класса им необходимо создать. И чем больше возможных вариантов появляется, тем больше разрастается эта конструкция, в последствии превращающиеся в уродливого монстра.

Что нам может предложить фабрика объектов?
Во-первых, простой метод создания объектов, который сократит switch/if до 1ой строчки.
Во-вторых, удобные методы для работы с объектами фабрики. Мы всегда точно можем узнать, зарегистрирован ли у нее определенный класс, количество зарегистрированных классов, а так же удобные методы для добавления и удаления экземпляров классов в фабрику. С помощью фабрики можно ограничивать набор возможных классов, которая она будет создавать, используя некую конфигурацию.

Читать дальше →

Разработка кросс-платформенного редактора с подсветкой синтаксиса на основе wxStyledTextCtrl

Время на прочтение4 мин
Охват и читатели3.7K

Доброе время суток Хабражители!


Хочу рассказать вам о своем опыте разработки редактора с подсветкой синтаксиса или редактора кода. Речь идет о редакторе для пользовательского языка. Суть этого поста не в детальном описании процесса разработки — я остановлюсь только на наиболее интересных моментах, слабо освященных или вообще пропущенных в документации.
Читать дальше →

Особенность работы со смарт-поинтерами в Qt

Время на прочтение3 мин
Охват и читатели38K
Смарт-поинтеры является очень важным механизмом управления временем жизни объектов. В Qt присутствует модель управления временем жизни объектов, когда объекты наследуются от базового класса QObject и задается “родство” — parent/child. При удалении объекта, он удаляет всех своих child. Эта модель управления временем жизни объектов очень хорошо сочетается с технологией взаимодействия между объектами “Signals & Slots” и при использовании смарт-поинтеров могут возникнуть тяжело отлаживаемые баги.
Читать дальше →

С++: как не сделать кино не для всех

Время на прочтение3 мин
Охват и читатели2.9K
image
Экран кинотеатра на мгновение погас и показал первые титры. Из темного зала стали доноситься весьма скудные аплодисменты. Начинает казаться, что закончившийся фильм мало кому понравился: по звуку можно насчитать десяток аплодирующих зрителей… Но тут свет загорается и оказывается, что фильм понравился всем. В полупустом зале сидит редкая группа зрителей, и хлопают все… Это был закрытый показ, который обычно именуют как «кино не для всех».
Какое отношение это имеет к C++? Пожалуй, самое прямое…
Читать дальше →

Запускаем Skype без надоедливой Главной страницы

Время на прочтение2 мин
Охват и читатели20K
Поводом к написанию заметки послужил недавний вопрос. Меня тоже очень раздражает окно Skype Home, появляющееся при каждом запуске, однако с помощью простой программы на C мне удалось от него избавиться. Получилось нечто вроде Hello World Tutorial по использованию Windows API. Программу можно скачать тут, а исходник с описанием найдете под катом.
Читать дальше →

Перезаписывать память – зачем?

Время на прочтение4 мин
Охват и читатели41K
В недрах Win32 API есть функция SecureZeroMemory с очень лаконичным описанием, из которого следует, что эта функция перезаписывает область памяти нулями и устроена таким образом, что компилятор при оптимизации кода никогда не удаляет вызов этой функции. Там же говорится, что следует с помощью этой функции перезаписывать память, ранее использованную для хранения паролей и криптографических ключей.

Остается один вопрос – зачем это? Можно найти пространные рассуждения о риске записи памяти программы в файл подкачки, файл hibernate или аварийный дамп, где его может найти злоумышленник. Это похоже на паранойю – далеко не всякий злоумышленник имеет возможность наложить руку на эти файлы.

На самом деле, возможностей получить доступ к данным, которые программа забыла перезаписать, гораздо больше – иногда не нужно даже иметь доступа к машине. Дальше мы рассмотрим пример, и каждый сам решит, насколько оправдана паранойя.
Читать дальше →

Создаём приложение на С++ с использованием Tesseract-ocr, MinGW и напильника

Время на прочтение6 мин
Охват и читатели32K
Так случилось, что понадобилось нам внедрить в своё приложение возможность распознавания текста, поэтому начались поиски подходящей библиотеки. В конечном счёте остановились на двух опенсорсных проектах CuneiForm Linux и Tesseract-ocr. Внимательное изучение проекта CuneiForm показало, что это просто порт продукта компании Cognitive Technologies, исходники которого они открыли в 2008 году и благополучно забили получив свою порцию внимания (во всяком случае такое сложилось впечатление). По сути весь проект состоял в портировании, а о новых фичах даже речи не шло. Всё это, вкупе с печальной новостью на страничке проекта, заставило нас отказаться от CuneiForm в пользу Tesseract, который в данный момент принадлежит Google, что даёт некоторую уверенность в будущем проекта. Под катом опыт сборки Tesseract-ocr под Windows с использованием MinGW и последующего создания простейшего приложения на С++.
Читать дальше →

С++: шаблон «поводок»

Время на прочтение6 мин
Охват и читатели5.4K
Намедни коллега подкинул такую задачку:

«Есть два типа объектов — Human и Dog. Human может владеть некоторой собакой (а может и не владеть). Dog может иметь некоторого хозяина (а может и не иметь). Понятно, что если некоторый объект типа Human владеет некоторым объектом типа Dog, то для данного объекта типа Dog именно данный объект типа Human является хозяином и только он. Причем Dog должен знать, кто его Human, и наоборот. Как бы ты это реализовал?»

Казалось бы, всё просто — заведём два указателя друг на друга у классов Human и Dog и дело в шляпе. Но реализация данной затеи привела меня к идее, как мне кажется, нового шаблона проектирования.
Читать дальше →

Про абстракции и метод рефакторинга «Extract method»

Время на прочтение3 мин
Охват и читатели4.4K
Абстракции чрезвычайно важны в программировании и это все знают. Они помогают нам отделить существенные детали чего бы то ни было от несущественных. В идеале они должны выделять только самое главное, эссенцию, без всяких посторонних примесей, минимум характеристик объекта или процесса, но идеал встречается не так уж и часто.
Читать дальше →

C++0x. Не вошедшее

Время на прочтение6 мин
Охват и читатели5.4K

На Хабре уже пробегали статьи о новом стандарте С++0х — что в него входит и как этим пользоваться. А эта статья — о том, что туда могло войти, но по определенным причинам было отклонено.
Читать дальше →

Поля класса доступные по имени с setter и getter в C++

Время на прочтение9 мин
Охват и читатели27K
Как известно, в C++ нет средства описания полей класса с контролируемым доступом, как например property в C#. На Хабрахабре уже пробегала статья частично на эту тему, но мне решительно не нравится синтаксис. К тому же очень хотелось иметь возможность обращаться к полям из ран-тайма по имени.
Читать дальше →

Ближайшие события

Использование dll в Meta Traider 4

Время на прочтение2 мин
Охват и читатели14K
Пост посвящен технике использование .dll ресурсов в MetaTrader4, а точнее в mql4.

Эта техника позволяет дооснастить аналитику и функционал MT4 практически ничем неогранниченными возможностями, начиная от импорта результатов сложных вычислений (IMSL, MatLab) до написания собственной инфраструктуры, которая использует MT4 как адаптер к брокеру.
Читать дальше →

Достала избыточность С++

Время на прочтение3 мин
Охват и читатели21K
imageПривет Хабр,
Меня вводит в ступор С++. Вот просто, зависаю над монитором, смотрю в окно, попиваю чай… И начинаю жалеть за бесценно проведенные годы за изучением стандарта С++, попытками написать свой фронт-энд компилер. Эти мудреные книжки С++ In Depth. Как же я негодовал, когда не понимал кода из книги Александреску. Как записывал все постулаты Страуструпа и иже с ними. Зачем? Вот спрашиваю себя, зачем я теперь все это знаю. Более, я хочу сказать, что этот язык нещаден для гуру, не с медицинской, не с экономической точки зрения! Он не оправдывает усилий, вложенных в его изучение — раз. На практике, он экономически не выгоден — два. И нервные клетки подтвердят, что сопровождать чужой плюснутый код — бывает опасно для здоровья -три. Пусть тут будут рандомно разбросаны метафоры, пишу как есть, из опыта.
Читать дальше →

Вычисления с плавающей точкой на этапе компиляции

Время на прочтение5 мин
Охват и читатели4K
Как известно, в C++ нельзя производить сложные вычисления с плавающей точкой на стадии компиляции. Я решил попробовать избавиться от этого досадного недостатка. Цель, к которой мы будем идти, на примере вычисления корня:
typedef RATIONAL(2,0) x;
typedef sqrt<x>::type result;

Корень числа вычислится на этапе компиляции. Представление числа хранится как отношение двух целых чисел, поэтому чтобы получить значение, нужно обращаться через метод get();
std::cout << result::get() << std::endl;
1.41421356
Подробности

Распределение количества ходов в карточной игре 'Пьяница'

Время на прочтение5 мин
Охват и читатели31K
Играя в эту замечательную игру, я заметил, что мой мозг полностью отключен т.к. игра не требует умственной деятельности, соответственно мне стало скучно. Я с нетерпением ждал когда-же эта игра закончиться и решил приблизительно прикинуть сколько-же еще ходов понадобиться? Без компьютера конечно-же не получилось и тогда я решил, что нужно обязатяльно провести несколько сотен тысяч испытаний, посчитать мат. ожидание, дисперсию и по возможности узнать тип распределения. Вооружившись с++, qt и чашкой кофе я перешел к делу…
Читать дальше →

Вычисление простых чисел на шаблонах C++

Время на прочтение4 мин
Охват и читатели23K
В этом посте я расскажу как сделать совершенно бесполезную вещь — вычислять простые числа при помощи шаблонов C++.

Алгоритмы проиллюстрированы кодом на Scheme, поэтому осторожно: скобочки!

Читать дальше →

Побеждаем Kinect в Linux

Время на прочтение8 мин
Охват и читатели8.6K
Это вторая статья из цикла о разработке C++ приложений, работающих с Microsoft Kinect. В этой части речь пойдет о том, как заставить устройство работать в Linux и как его можно использовать в своих приложениях.

Первую статью о разработке для Kinect можно почитать здесь. Настоятельно рекомендую к прочтению первую часть ибо без нее впечатления от второй будут неполными.
Читать дальше →

Переполнение при умножении

Время на прочтение3 мин
Охват и читатели15K
Перед выполнением умножения C++ приводит множители к одному типу не короче int, а разрядность результата совпадает с разрядностью приведенных множителей. Для того, чтобы не потерять точность, иногда требуется для умножения выполнять дополнительные операции.
Читать дальше →

Вклад авторов