Метка «c++» - 85


C++ слишком сложен?

Иногда почитываю хабр. И когда заметил пост http://habrahabr.ru/blogs/cpp/111403/, честно признаюсь, он задел меня за живое. Я использую язык C++ как основной много лет. Еще раз честно признаюсь: так и не знаю его полностью. Вряд-ли я смог бы сотворить что-либо подобное Boost::MPL, Boost::Spirit или Boost::Xpressive. Но повод ли это говорить о сложности языка? Да, стандарт языка C++ раза в два больше стандарта C#. Но посмотрите на содержание: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-334.pdf и http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2461.pdf.Читать полностью »

В предыдущей статье были рассмотрены основные компоненты ffmpeg и на их основе построен простейший плеер для воспроизведения видео со скоростью декодирования, без синхронизации.
В этой статье мы рассмотрим как добавить воспроизведение звука и разберемся с синхронизацией.

Введение

В основе большинства приложений и фреймворков для работы с мультимедиа лежит граф. Узлами графа являются объекты, выполняющие конкретную задачу. Для примера рассмотрим такой граф видеоплеера.
Работа с видео / Доработка видеоплеера ffmpeg
Работа начинается с блока ЧтениеЧитать полностью »

Случилось недавно так, что понадобилось в одном проекте использовать компонент TabControl. Стандартный компонент, ничего необычного, достаточно удобный. Нюанс заключался в том, что нужно было использовать свой тип вкладок на основе перегруженного TabPage. Кроме этого, необходимо было позволить пользователю добавлять вкладки самому в процессе работы. Выглядеть оно должно было примерно так:
image

Радует, что стандартные компоненты позволяют делать с ними достаточно много извращений.

Линк на тестовый проект сЧитать полностью »

Всем хабрапривет!Qt Software / Выборочная сборка плагинов — мы пойдём иным путём

Маленькая (ну очень маленькая) заметка о том, как дать плагину выбирать самому — собираться в данной системе или нет. Конечно, есть старый добрый способ — просто исключить сам лишний плагин из сборки, к примеру, так:

# plugins.pro  TEMPLATE=subdirs  SUBDIRS+=common macx: SUBDIRS+=macplugin win32: SUBDIRS+=winplugin

Но при таком подходе при добавлении каждого нового плагина надо его прописать в plugins.pro и установить для каких систем он будет собираться. Если плагинов всего-то 5 штук и больше не предвидится, то это нормально. Но если уже есть 20 плагинов, и ещё 30 планируется, причём многие из них должныЧитать полностью »

Не давно мне довелось поучаствовать в одном интересном проекте. Моя сестра учиться на дизайнера в БВШД, и им дали задание сделать проект на тему Street Interactive. Идея была выбрана довольно простая. На экране демонстрируется анимация движущегося медведя, всем желающим предлагается попасть в него из рогатки импровизированным снежком.Читать полностью »

Не так давно мне пришлось делать приложение для Windows Phone работающее с xml-файлами. Всё было неплохо, но когда в файле стало ~100.000 записей, чтение их занимало ну уж очень много времени. И я решил сравненить производительность различных способов чтения данных из xml возможных на платформе .Net.

Подробности под катом.

Оборудование

Для лучшего понимания показателей проведенных тестов стоить рассказать на чём они были проведены. Тесты из разряда «Desktop» я выполял на домашнем компьютере:

  • Процессор: Pentium Dual-Core T4300 2100 Mhz
  • RAM: DDR2 2048Mb

Тесты на Windows Phone были выполнены на HTC 7 Mozart.

Подготовка кЧитать полностью »

Все, кто когда-либо писали программы на C#, использовали такую простую функцию как

Convert.ToDouble(string value);

у меня, как и у остальных, до определенного момента никаких проблем с ней не возникало. У этой функции есть такая особенность, которая не всем известна — это то, что разделитель по умолчанию используется тот, который стоит в системе.
image

image

В англоязычных странах в качестве разделителя используется точка, а в остальных странах, преимущественно, запятая. Всё в принципе, не плохо, и среда .Net, как иЧитать полностью »

image
QML технология красивая и радует глаз. Меня она очень заинтересовала, и я решил ее освоить. Но не тут то было, ибо я оказался тупым и беспомощным. Нигде в сети не нашел примера «для чайников» (наверно плохо искал), чтобы с нуля построить простейшее приложение QML и C++ в связке. Везде чего-то не хватало: или не учитывался Qt Creator, или код выдавал ошибки, или отсутствовали целые моменты, которые пользователи должны были сами знать. Официальная документация и примеры здесь на хабре также были с этими недостатками. Вот и решил после долгих попыток и ошибок написать такую статью для начинающих с подробнейшимЧитать полностью »

C/C++ позволяют выполнить проверки константных выражений ещё на этапе компиляции программы. Это дешёвый способ избежать проблем при модификации кода в будущем.
Я рассмотрю работу с:

  • перечислениями (enum),
  • массивами (их синхронизацию с enum),
  • switch-конструкциями,
  • а так же работу с классами, содержащими разнородные данные.

BOOST_STATIC_ASSERT и все-все-все

Существуют много способов сломать компилятор во время компиляции. Из них мне больше всего нравится такое исполнение:
#define ASSERT(cond) typedef int foo[(cond) ? 1 : -1]

Но если у вас вЧитать полностью »

Сегодня передо мной встала задача сделать полную копию объекта, то есть DeepClone. Рассмотрим некоторый код и я покажу какие проблемы при этом могут возникнуть и как их решить.

Исходный класс:

class ClassForClone { 	//here are value type fields 	 	public readonly A a; 	public readonly Lazy<string> lazy; 	 	protected void Func1() 	{ 		//to to something; 	} 		 	public ClassForClone(A a) 	{ 		this.a = a; 		lazy = new Lazy<string>(() => 		{ 			// some calculations  			Func1(); 			return a.SomeText; 		}); 	} } 

Воспользуемся функцией побитового копирования полей объекта Object.MemberwiseClone(). Она избавляет нас от монотонной работы копирования полей, но все поля с ссылочными типамиЧитать полностью »


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