Обновить
298.94

C++ *

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

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

Ловушки языка С++

Время на прочтение3 мин
Охват и читатели50K
Было бы неплохо сделать серию статей, в которых описывались различные не очевидные «особенности» языков программирования. Во-первых, «предупреждён — значит, вооружён», во-вторых, знание их позволяет глубже понимать язык и объяснить, в случае чего, чем они опасны. Даже если в своём собственном коде такие конструкции не используются, с этими ловушками можно встретиться при разборе чужого кода или работая в команде.
Читать дальше →

От последовательного кода к параллельному за пять шагов c Intel® Advisor XE

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

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

Новый инструмент Intel Advisor XE поможет вам распараллелить приложение, потратив на это минимум сил и времени.

Advisor XE вышел в свет в сентябре этого года в составе пакета для разработчиков Intel Parallel Studio XE 2013. Дословный перевод названия – «советчик» — довольно ёмко описывает его предназначение. Инструмент помогает программисту проанализировать возможности распараллеливания кода: найти наиболее подходящие для этого участки и оценить предполагаемый полезный эффект – а стоит ли вообще за это браться? Кроме того, Advisor XE подскажет, где могут возникнуть ошибки, такие как гонки данных. И всё этого без реальной модификации программы! Но обо всём по порядку.
Читать дальше →

Qt виджет для добавления и удаления строк в таблицe QTableView

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

В этой статье я хотел бы поделиться своим опытом разработки одного виджета (элемента графического интерфейса), попутно осветив некоторые технологии и техники Qt.
Очень часто бывает необходимо дать пользователю возможность вставки строк и столбцов в таблицу или удаление их из неё. Как правило это реализуется так: надо выделить строку кликнув по хидеру и выбрать пункт в меню: select > menu > insert | delete. Это не совсем очевидно и интуитивно, как и то что строка вставляется перед текущей а не, например, после неё. Поэтому я написал виджет который снимает эту проблему.
Виджет выглядит как четыре кнопки, следующие за курсором по границе таблицы (хаха, это совсем как те пчелки, которые бегали за курсором на сайтах в эпоху вэб 1.0!). Можно было бы перегрузить QTableView, но тогда придется изменять все инстансы; вместо этого я написал отдельный виджет которые представляет из себя как бы панельку которая прикрепляется к уже имеющемуся QTableView.
Читать дальше →

Разработка «универсальной» библиотеки для создания нейронной сети (Начало)

Время на прочтение5 мин
Охват и читатели4.5K
Предыстория

Я, простой смертный, даже и не думал о ИИ как о универсальном помощнике, спокойно себе кодил под АРМ-ы на сях (С/С++), и все бы- ничего, если не одно НО.
Как-то познакомился я с человеком на форуме посвященному тематике кодинга под АРМ, довольно долгое время он многое мне разъяснял, помогал, +он и сам сделал не мало интересного. Но как то раз речь зашла о ИИ и вот тогда меня и заитересовал его ответ в стиле «Живет вот у меня на компе что то, что тебе интересно, неплохой дебаггер, таск менеджер +бот для аськи, который уже не раз тест Тьюринга прошел ». Я, конечно, как вполне адекватный человек не поверил, т.к. исходники давать он отказался, готовую программу он обещал дать только если взломаю его комп и получу доступ к ФС. Несколько лет с тех пор прошло, и еще не раз поднималась тема на счет его ИИ. Хотя опытный образец мне получить так и не удалось, да и на 100% я не уверен, что он вообще у него есть, но это и не важно, т.к. каждое наше общение зарождало во мне идею напейсать свой ИИ.
Читать дальше →

Доступен предзаказ 4-го издания «The C++ Programming Language»

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

ISBN 978-0321563842

Ссылка на подтверждение от автора
Ссылка на предзаказ Amazon
Предзаказ пока идет со скидкой 30%.

«Концепты» на 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);

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

Как определить все мониторы и их разрешения

Время на прочтение1 мин
Охват и читатели27K
image
Недавно возился с нормальной инициализацией окна, и стояла задача задетектить все мониторы и их разрешения. Оставлю тут решение для потомков.
Читать дальше →

C++ Debugger Visualizers: отображение типов в отладчике из Boost, wxWidgets, TinyXML и TinyXML2

Время на прочтение2 мин
Охват и читатели8.4K
imageС незапамятных времен в Visual Studio существовала возможность написания визуализаторов для своих C++ типов, что позволяет изменить способ отображения типов в окнах отображающих содержимое переменных в отладчике (такие как auto, watch, locals и всплывающие подсказки для переменных). В Visual Studio 2012 появилась возможность в расширениях к Visual Studio распространять визуализаторы в новом формате natvis.

Были конвертированы старые визуализаторы для Boost'а и мои старые для TinyXML, а также добавил новые визуализаторы для Boost, wxWidgets и TinyXML2. Получилось в итоге расширение к Visual Studio 2012 — C++ Debugger Visualizers
Читать дальше →

Как правильно скопировать массив и при чем тут SFINAE

Время на прочтение6 мин
Охват и читатели31K
Копировать элементы из одного контейнера в другой? Нет ничего проще, универсальный алгоритм помещается в 5 строк:
template<class InputIterator, class OutputIterator>
OutputIterator copy(InputIterator first, InputIterator last, OutputIterator result) {
    while(first != last) *result++ = *first++;
    return result;
}
Возможно вы узнали реализацию std::copy с cplusplus.com. Почему же реализация std::copy из GNU STL занимает 139 строк? Давайте разберемся.
Читать дальше →

Во всём виноват компилятор

Время на прочтение2 мин
Охват и читатели38K
Многие программисты очень любят обвинять компилятор в различных ошибках. Поговорим немного об этом.
Читать дальше →

LISP-интерпретатор на чистом C

Время на прочтение21 мин
Охват и читатели20K
Я люблю язык C за его простоту и эффективность. Тем не менее, его нельзя назвать гибким и расширяемым. Есть другой простой язык, обладающий беспрецедентной гибкостью и расширяемостью, но проигрывающий C в эффективности использования ресурсов. Я имею в виду LISP. Оба языка использовались для системного программирования и имеют давнюю и славную историю.

Уже достаточно долго я размышляю над идеей, объединяющей подходы обоих этих языков. Её суть заключается в реализации языка программирования на основе LISP, решающего те же задачи, что и C: обеспечение высокой степени контроля над оборудованием (включая низкоуровневый доступ к памяти). На практике это будет система LISP-макросов, генерирующая бинарный код. Возможности LISP для препроцессирования исходного кода, как мне кажется, обеспечат небывалую гибкость, в сравнении с препроцессором C или шаблонами C++, при сохранении исходной простоты языка. Это даст возможность на базе такого DSL надстраивать новые расширения, повышающие скорость и удобство разработки. В частности, на этом языке может реализовываться и сама LISP-система.

Написание компилятора требуют наличие кодогенератора, а в конечном итоге — ассемблера. Поэтому практические изыскания стоит начинать с реализации ассемблера (для подмножества инструкций целевого процессора). Мне было интересно минимизировать какие-либо зависимости от конкретных технологий, языков программирования и операционной системы. Поэтому я решил с нуля реализовать на C простейший интерпретатор импровизированного LISP-диалекта, а также написать к нему систему макрорасширений, позволяющих удобно кодировать на подмножестве ассемблера x86. Венцом моих усилий должен стать результирующий загрузочный образ, выводящий «Hello world!» в реальном режиме процессора.

На текущий момент мною реализован работающий интерпретатор (файл int.c, около 900 строк C-кода), а также набор базовых функций и макросов (файл lib.l, около 100 строк LISP-кода). Кому интересны принципы выполнения LISP-кода, а также подробности реализации интерпретатора, прошу под кат.
Читать дальше →

Работа с QDataStream

Время на прочтение5 мин
Охват и читатели66K
Приходилось часто работать с классом QDataStream. В результате накопил некоторый опыт, как правильно его использовать.

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

Авторизация в приложениях

Время на прочтение5 мин
Охват и читатели9.5K
Добрый день всем. В этой статье я опишу свой практический опыт проектирования системы авторизации, в частности на C++ Qt 4. Для многих опытных программистов покажется все нижеизложенное банальностью, но для начинающих свой путь программистов, данный опыт думаю, будет полезен. Слов минимум, в основном вырезки кода.
Читать дальше →

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

Реализация синглтона в многопоточном приложении

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


Введение


В настоящий момент сложно себе представить программное обеспечение, работающее в одном потоке. Конечно, существует ряд простых задач, для которых один поток более, чем достаточен. Однако так бывает далеко не всегда и большинство задач средней или высокой сложности так или иначе используют многопоточность. В этой статье я буду говорить об использовании синглтонов в многопоточной среде. Несмотря на кажущуюся простоту эта тема содержит множество нюансов и интересных вопросов, поэтому считаю, что она заслуживает отдельной статьи. Здесь не будет затрагиваться обсуждение того, зачем использовать синглтоны, а также как их правильно использовать. Для прояснения этих вопросов я рекомендую обратиться к моим предыдущим статьям, посвященным разным вопросам, связанным с синглтонами [1], [2], [3]. В этой статье речь будет идти о влиянии многопоточности на реализацию синглтонов и обсуждению вопросов, которые всплывают при разработке.
Читать дальше →

Алгоритмы сортировки. Gnome Sort на Си

Время на прочтение2 мин
Охват и читатели20K
Алгоритмы сортировки. Их не много, но и не мало. Есть часто используемые, есть никому не нужные. Я решил произвести обзор этих алгоритмов, чтоб освежить и свою память, и память хабрапользователей. И начнём с редкоиспользуемого алгоритма Gnome Sort(гномья сортировка).
Читать дальше →

AngelScript

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

Введение


В процессе рассмотрения LUA и Python я выделил для себя, что LUA является достаточно быстрым, но с немного непривычным синтаксисом. Python же обладает очень простым синтаксисом и массой полезных библиотек, но, к сожалению, он оказался довольно медленным, и его довольно тяжело привязывать к С++. И тут на работе мне подсказали использовать AngelScript, мол, он удобный для связки, быстрее LUA и имеет С-подобный синтаксис. Как только я начал его изучать, я понял, что это тот самый скриптовый язык моей мечты.

Превью


Вот что можно прочитать про этот язык на Википедии:

AngelScript представляет собой движок, в котором приложение может регистрировать функции, свойства и типы, которые могут использоваться в скриптах. Скрипты компилируются в модули. Количество используемых модулей варьрируется в зависимости от нужд. Приложение может также использовать различные интерфейсы для каждого модуля с помощью групп конфигурации. Это особенно полезно, когда приложение работает с несколькими типами скриптов, например, GUI, AI и т.д.

Программа «Hello, world» в простейшем случае выглядит так:

void main() 
{ 
   print("Hello world\n"); 
}  

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

Создаем стиль интерфейса Qt на примере таблицы

Время на прочтение11 мин
Охват и читатели66K
Как известно, Qt предлагает разработчикам практически неограниченные возможности для создания интерфейсов. В большинстве случаев, если вы используйте стандартные виджеты, внешний вид вашего приложения (и элементов его интерфейса) будет соответствовать внешнему виду вашей операционной системы. Для этого в Qt есть система так называемых стилей — классов, ответственных за отрисовку стандартных элементов интерфейса. В этой статье мы попробуем создать свой стиль и применить его к простейшему приложению для того, чтобы получить красивую таблицу на основе виджета QTableWidget.
Читать дальше →

Поддержка C++ на avr в gcc

Время на прочтение9 мин
Охват и читатели41K
Компилятор avrgcc поддерживает C++, однако в его поставку не входит ни стандартная библиотека, ни реализация ABI: служебных функций, вызовы которых вставляет сам компилятор. В результате люди пытаются реализовать те части, которые им нужны, самостоятельно и зачастую делают это не очень хорошо. Например, часто предлагается отстрелить себе ногу определив пустую функцию __cxa_pure_virtual(void) {} или подложить себе грабли, написав заглушки для __cxa_guard_acquire, __cxa_guard_release и __cxa_guard_abort. В данной статье я предлагаю разобраться, чего не хватает для счастья, где это взять или как написать.
Я знаю, что немло людей считает, что C++ на микроконтроллере не нужен. Их я прошу прочитать последний раздел статьи перед тем, как писать комментарии.
Читать дальше →

Вложенные функции на C++

Время на прочтение4 мин
Охват и читатели61K
Приветствую сообщество!

Я наткнулся на возможность сделать в С++ что-то похожее на объявление функций внутри функций. Выглядит это вот так:

#include <iostream>
int main()
{
    inline_function(std::string s)
    {
        std::cout << "Hello, " << s << "!\n";
    }
    with_name(make_hello);

    make_hello("Vasiliy Pupkin!");
    return 0;
}


В приведенном примере внутри метода main изготавливается вложенный «метод» с названием make_hello и затем вызывается с параметром «Vasiliy Pupkin». Разумеется, на экран будет выведено Hello, Vasiliy Pupkin!.

К сожалению, перетащить название вверх у меня не получилось.

Как это сделано

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