Обновить
277.78

C++ *

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

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

Снижение компонентной связности кода С++

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

Избавляемся от недостатков классического ООП и пишем на С++ в модульном стиле.
Читать дальше →

Поиск решений для игр со словами. Применение бора

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

Вступление


Существует множество игр, где игроку необходимо искать слова из определенного набора букв. Вот две наиболее популярные из них.
1. 4 фото 1 слов (4 Pics 1 Word) AppStore, Google Play
У этой игры довольно много реализаций, но идея у всех одна.
2. Словомания (Wordsmania) AppStore, Google Play
Читать дальше →

Кроссплатформенный https сервер с неблокирующими сокетами. Часть 3

Время на прочтение6 мин
Охват и читатели10K
В этой статье я продолжаю усовершенствовать однопоточный https сервер на неблокирующих сокетах. Предыдущие статьи с ссылками на исходный код, можно найти здесь:
Простейший кросcплатформенный сервер с поддержкой ssl
Кроссплатформенный https сервер с неблокирующими сокетами
Кроссплатформенный https сервер с неблокирующими сокетами. Часть 2

В конце этой статьи будет ссылка на исходный код сервера, который я протестировал в Visual Studio 2012 (Windows 8 64bit), g++4.4 (Linux 32bit), g++4.6 (Linux 64bit). Сервер принимает соединения от любого количества клиентов и отправляет в ответ заголовки запроса.
Но начну я статью пожалуй, с ответов на некоторые комментарии к предыдущим.
Читать дальше →

Впечатления от знакомства с Ultimate++

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели18K
Если вы фрилансер или любите экспериментировать с экзотическими средами под С++, то стоит обратить внимание на экосистему Ultimate++, о которой я узнал совсем недавно благодаря циклу статей Семена Есилевского (ч.1, ч.2, ч.3, ч.4 — все есть на вики) с таким финальным напутствием:
«Перевешивают ли выгоды U++ его необычность и высокий «барьер вхождения»? На мой взгляд, да. U++ – прекрасный выбор для кроссплатформенных проектов, которые разрабатываются «с нуля», особенно если предполагается интенсивное использование баз данных.»

Под катом те нюансы U++, которые удалось раскопать на форуме и в мануалах за месяц ежедневной работы над редактируемым справочником документов, хранящихся в базе. Сразу отмечу, что сравнения с «замечательной троицей» не будет, так как раньше для простейшего gui использовал WTL и с надеждой смотрел на библиотеку eGUI++, которую, к сожалению, автор забросил, а подхватить некому.

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

Вычисление максимального числа в массиве на этапе компиляции

Время на прочтение3 мин
Охват и читатели8.1K
Здравствуй хабр!

Не так давно понадобилось вычислить максимальную длину из нескольких заданных строк на этапе компиляции. Нужно выделить память под массив char[], так чтобы в нем уместилась любая строка из заданных. Логично предположить, что если система спроектирована хорошо, никаких вычислений на этапе компиляции не нужно, можно воспользоваться динамическим выделением используя std::auto_ptr или std::string, но это не тот случай. Структура в которой хранится буфер char[] должна быть POD-типом.

По сути задача сводится к определению максимального числа в массиве на этапе компиляции. В данном топике я покажу как это сделать в стандарте c++03 и c++11. В ходе поиска решений нашел две статьи, которые помогли мне решить проблему: habrahabr.ru/post/166201, habrahabr.ru/post/38622.
Узнать как...

Аргументированная фабрика

Время на прочтение6 мин
Охват и читатели6.3K
Доброго времени суток!

Задача

В текущем проекте столкнулся с необходимостью генерировать объекты-наследники от общего интерфейса, при этом порождать наследников необходимо, передавая им в конструкторе некий объект-инициализатор. Конструктора по-умолчанию у классов может и не быть. При этом конкретная фабрика объектов определяется в динамически подгружаемых плагинах, поэтому должна иметь определенный интерфейс.
Могу предложить два способа решения данной задачи.
Читать дальше →

Лямбда-функции и реализация удобного механизма Callback-ов на C++

Время на прочтение5 мин
Охват и читатели53K
В этой статье на примере реализации механизма обратного вызова будет рассмотрена возможности применения лямбда функций в удобной и быстрой форме.
Читать дальше →

Генерация карты высот

Время на прочтение3 мин
Охват и читатели32K
В качестве языка программирования здесь используется C++, но перенести этот код на другой язык программирования будет не так уж сложно.
Код написанный ниже далёк от идеала, но новичкам он может пригодится.
Не так давно у меня была проблема с генерацией карты высот для ландшафта.
Читать дальше →

Оберточная библиотека-перехватчик

Время на прочтение5 мин
Охват и читатели5.6K
Доброго времени суток всем!
Недавно я выкладывал свою реализацию перехватчика(тут).
Получился он, чего уж греха таить, громоздким и коряво работающим. В 1 же из комментариев отписался уважаемый k_d и упомянул о своей обертке над mhook(MHook vs Zuma).
Конечно, меня заинтересовала альтернатива, работающая с перехватом не только __cdecl'а но и, более того, позволяющая ставить перехват практически в любом месте кода.
Решение понравилось и я решил переписать свою библиотеку, которую использую для различного рода перехватов, начисто, с использованием материала от k_d. Текущий вариант умеет перехватывать все, до чего дотянутся загребуще-экспериментальные ручки программиста и парсить аргументы из стека(по крайней мере, потенциально идея это все умеет. Наверное.)
Представляю Вашему вниманию то, что получилось.
Читать дальше →

В C++ единицей инкапсуляции является класс

Время на прочтение3 мин
Охват и читатели19K
Заголовок статьи на самом деле представляет собой не одно утверждение, а два, хотя оба они известны:
  1. В C++ единицей инкапсуляции является класс – а не отдельный объект ([Stroustrup3e], 24.3.7.4).
  2. В C++ единицей инкапсуляции является класс – а не класс вместе с его ниже стоящей иерархией.
Читать дальше →

«Концепты» на C++

Время на прочтение2 мин
Охват и читатели14K
Всем доброго времени суток.

Придумано и написано под влиянием некоторых публикаций Страуструпа на тему концептов в C++.
Захотелось мне однажды необычного — сделать так, чтобы нешаблонные функции/методы на C++ могли принимать в качестве аргумента любой объект, имеющий определенный набор методов, примерно так:
void fn(VectorWrapper<int> x)
{
    for (size_t i = 0; i < x.size(); ++i)
    {
        doSomething(x[i]);
    }
}

::std::vector<int> sv;
QList<int> qv;
OtherSuperVector<int> ov;

fn(sv);
fn(qv);
fn(ov);

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

Создание агента расширения SNMP

Время на прочтение4 мин
Охват и читатели22K
Добрый день. Речь пойдет об использовании протокола SNMP, но немного не в том ключе, как все привыкли. Википедия сообщает, что данный «протокол обычно используется в системах сетевого управления для контроля подключенных к сети устройств на предмет условий, которые требуют внимания администратора». Такими устройства зачастую являются маршрутизаторы, хабы, коммутаторы, мосты, принтеры и, естественно, сами компьютеры. Для реализации функции контроля на каждом таком устройстве присутствует агент SNMP, в непосредственные обязанности которого входит сбор информации и передача ее менеджеру по запросу.

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

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

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

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


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

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

Обфускация строк C++ в Visual Studio

Время на прочтение8 мин
Охват и читатели27K
Бинарная защита своих программ — дело часто нелёгкое и неблагодарное, ведь если продукт кому-то нужен, его всё равно сломают, как ни старайся. При этом самая лучшая защита всегда должна писаться, ну или по крайней мере настраиваться, вручную, а всякие там пакеры/кодировщики/виртуальные машины тоже конечно помогают, но чем более автоматически работает защита, тем легче она потом ломается, к тому же если использовать какой-то известный пакер, то кракеры его уже 10 раз ломали в других продуктах, и знают что в нём к чему. К тому же все более-менее удачные пакеты защит стоят немалых денег.

Опять-таки, чем более наворочена система защиты и чем больше ручной настройки она требует, тем больше это влияет на внешний вид самого кода, всякие там проверки, кодировки, контрольные суммы, которые если делать по-хорошему, нужно запихать в самые разные места в коде, чтобы кракеру было труднее найти. Код принимает нечитабельный вид, изменять его становится сложнее, это всё занимает ещё больше времени и т. д.

Вот и встаёт вопрос в том чтобы найти компромис между уровнем защиты/затраченным временем/удобочитаемостью кода/стоимостью и т. д.

Хочу поделиться с вами моим собственным решением для обфускации строк в программе, которое хоть и даёт лишь минимальную защиту, но является 1) бесплатным 2) лёгким 3) почти не портящим внешний вид кода 4) новым, которое кракер скорее всего в данной конкретной конфигурации ещё не видел.

Сразу хочу сказать что это решение лишь ненадолго замедлит уверенного хакера со стажем, но является очень простым и занимает лишь от силы минут 15 в начальной настройке. Оно призвано скорее дать минимальную защиту от нубо-хакеров и скорее натолкнуть вас на более защищённый тип мышления в кодинге, и дать вам шанс самим развить этот метод и реализовать другие типы защит.
Читать дальше →

Обертка для вызова функций по их адресу

Время на прочтение5 мин
Охват и читатели7.8K
Доброго времени суток!
Было дело — делал я интерфейс для работы с модулями для USB от FTDI. Пришлось изрядно повозиться с подключением DLL-интерфейса. Разочаровавшись в возможностях автоматической линковки Microsoft Visual Studio 2008 (UPD: потом я разобрался с этой темой), я решил это делать вручную. По ходу дела задолбался очень надоело вручную подключать несколько десятков функций. И тогда я обратился к Google, C++ и шаблонам. И если подключение DLL в стиле C++ вопросов не вызвало, то удобный вызов подключенных функций в стиле «Error = FT_Open (Num, &_Handler)», где FT_Open- объект, удался не сразу. Итог (для таких вот функций) — под катом. Если вкратце — я сделал обертку вокруг указателя на функцию.
Читать дальше →

Coroutines в C++20

Уровень сложностиСложный
Время на прочтение11 мин
Охват и читатели8K

В С++ 20 появились coroutines (далее буду называть их корутинами, по‑русски). Если кратко — они позволяют писать асинхронный код также как мы пишем синхронный. При этом асинхронный код это не обязательно должен работать с несколькими потоками. Асинхронным может быть код исполняемый в одном потоке.

Под капотом компилятора корутины — это просто синтактический сахар (syntax sugar). Т.е. корутины не создадут дополнительных потоков. Компилятор заменит корутины вызовом нескольких функций и не более того. Но давайте посмотрим как корутины выглядят в коде.

В этой статье я буду делать простейший таймер на основе корутин. При этом напишу классы, для Awaitable и Promise, которые необходимы для работы корутин.

Читать далее

Алгоритмы на графах

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели10K

Краткое и доступное руководство по базовым алгоритмам на графах: BFS, DFS, топологической сортировке и алгоритму Дейкстры. Чёткие объяснения, примеры и код на C++ — для тех, кто хочет быстро и уверенно освоить фундамент графовых алгоритмов.

Узнать больше об алгоритмах

Гарантии языка программирования как основа безопасной разработки программного обеспечения

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели9.8K

Ошибки при составлении программ для ЭВМ появились даже раньше, чем были придуманы самые первые языки программирования. Собственно, языки программирования и были придуманы как раз для того, чтобы программы писались проще, а количество ошибок в них было как можно меньше.

Для уменьшения количества ошибок было разработано множество методов, включая создание специализированных инструментов анализа исходного кода и даже целых языков программирования.

Но по прошествии многих десятилетий проблема чисто технических ошибок в программном обеспечении так и остаётся нерешённой по сей день, однако подход, предложенный в языке Rust, меняет всё.

Читать далее

Многопоточность в современном C++: Lock-Free программирование, Memory Ordering и Atomics

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели11K

Многопоточное программирование в C++ традиционно ассоциируется с мьютексами, condition variables и потенциальными проблемами вроде deadlocks и race conditions. Однако современные стандарты C++ (начиная с C++11 и далее) предоставляют инструменты для написания высокопроизводительного многопоточного кода без классических блокировок. В этой статье рассмотрим продвинутые техники: lock-free программирование, атомарные операции и различные модели упорядочивания памяти.

Читать далее

How to make 3D Skeletal animation system — custom overview

Уровень сложностиСредний
Время на прочтение10 мин
Охват и читатели10K

Всем привет! Сегодня на обзоре Скелетная анимационная система, её организация и упорядочивание.

Скелетная анимация в 3D - это инструмент для лучшего погружения в повествование.

Часто ли вам приходилось задаваться вопросом: как сделать скелетную систему для 3D? Как организовать данные, как удобнее? Возможно, есть какие-то желания, которые при реализации хотелось бы учесть. Именно таким вопросом я задался, каким-то вечером. И так я начал изучать, что и как сделать. Но всё глубже погружаясь в какие-то туториалы, я обращал внимание на то, как организован код, и всё ускользало, как сквозь пальцы. Казалось бы, вот код, но он как бисер, рассыпан по многочисленным файликам какого-то обзорщика. Так же в какой-то момент, я уже точно знал, как я хочу, чтобы выглядел код, какой мне бы хотелось. Конечно, не совсем так. Узнал о том, какой я хочу код, после некоторых тестов... В общем, предлагаю взглянуть на то, как я смог реализовать анимационную систему в моём стиле. Добро пожаловать в эту статью, кому интересно рассмотреть какие-то нюансы с первых строк кода.

Читать далее

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