Pull to refresh

Comments 17

Английский вариант статьи в блоге удваивает Ваши заслуги перед отечеством =)
Меня пару месяцев назад невероятно интересовал весь этот Qt-шный PImpl, но тогда я так и не смог найти внятных ответов на мои вопросы. Ваши статьи многое прояснили. Надеюсь на этом Вы не остановитесь.
Спасибо. Честно говоря я собирался писать только на английском. Но потом захотелось стать частью хабра и решил написать статью в двух вариантах. По английски я пишу чтобы подтянуть свой английский, так как собираюсь сдавать IELTS экзамены. Одно из модулей сдачи — написание сочинения. Вот и тренируюсь. Плюс действительно действенно так как приходится вспоминать времена и некоторые слова (точнее часть слов из пассивного словаря переношу в активный).
Но после того как я увидел резонанс (посещаемость моего блога сейчас 400 в день !!!) меня подбило занятся этим на «постоянной основе». Тем более, что рассказать мне еще много чего есть и я лично очень болею за будущее Qt и в моих же интересах вложить свои 5 копеек в популяризацию этого фреймворка. В этом случае востребованость Qt специалистов выростет, чему буду я очень рад :-)
да и кстати мой блог постиг хабраэффект :-) так как большинство посещений из России, Украины и Белорусии. Рейтинг идет в этом порядке, только между Россией и Украиной стоит США (сначала написал а потом понял двойственный смысл :-))
Так что ребята спасибо за хабраэффект :-) Никогда не верил в разный там интернет пиар а тут увидел его в действии.
Прошу прощения, немного не по теме, но стало интересно, что за ключевое слово «signals: »?
Это Qt-шный по сути макрос. Область, где будут описаны функции в специальном унифицированном формате, которые потом можно потом выпонить (emit). А внешним по отношению к классу механизмом эти сигналы связываются со слотами (функциями-приемниками) других обработчиков, таким образом происходит взаимодействие между разными объектами. Весьма удобный унифицированный механизм. не без недостатков, конечно, но удобный.
Ясно, прикрутили события к старому доброму(?) С++ :)
да, типа того. Только не на уровне модификации компилятора как надо бы это сделать (расширение языка), а макросами и препроцессором. Но это религиозная тема совместимости, да:)
в бусте есть точно такое же «ключевое слово» (из-за этого при миксе буста и кутишного кода лучше пользоватся Q_SLOTS вместо slots). Кстати про сигналы и слоты тут перевод есть официальной доки в хабре habrahabr.ru/blogs/qt_software/50812/.

Очень полезный механизм, четко спионереный у NextStep'а, GTK+ и boost тоже повзаимствовали его :-)
Почитал, в чистом то, что у нас называется «события» :) Как-то так это выглядит в C#:

public class SomeClass {
public event Proc<int, SomType> SomeSignal;

}


void SomeSlot(int a, SomeType b){

}

var someObject = new SomeClass();

someObject.SomeSignal += SomeSlot;
по сути да. Методологическая основа у событий и у сигнал/слотов одинаковая.
а зачем выражение после emit брать в скобочки
emit это тоже пустой макрос.
для того что все что в скобках макроса — это как-бы его параметры — это раз.
А во вторых так проще парсить в moc.
Можно кстати будет потом вывернуть на изнанку moc предкомпилер и добавить возможность обработки собственного препроцессинга через плагины. Вот такая у меня идея вчера перед сном пришла. Правда прийдется систему плагинов делать чисто C++ ибо на момент сборки moc предполагается что qt еще не собран :-) Но это не остановит настоящего индейца.
Да кстати кому интересно. Я сейчас тут переписываюсь с Андре Поэтисом, который занимается разработкой Qt-creator по поводу gdbmacroshelper. Он поддерживает меня что он реализован не очень. Поэтому они ведут разработку по его улучшению и уже есть девелоперский вариант, который он выложил в репозиторий по моей просьбе. Суть в том, что теперь испльзуется не call команда gdb, а биндинг питоновго скриптинга в gdb.
Моя основная идея состоит в том, чтобы расширить этот механизм для того чтобы можно было создавать дамперы своих кастомных классов. При существующей схеме единственный вариант — это линговать этот макрос с той библиотекой из которой вы хотите дампить класса. Так вот идея состоит в том чтоб придумать как это сделать так, чтобы можно было не прибегая к добавлению лишнего кода в исходники и не делая зависимым gdbmacroshelper от левого кода дать возможность людям писать собственные дамперы как можно проще.

Вот напишу что и как я нарыл чуть позже, может кто посоветует чего-нибудь.
В битве за самый выносящий мозг язык программирования мои любимые языки C++ и Haskell убьют друг друга :)

Спасибо за статью.
Sign up to leave a comment.

Articles