А я прошел курс Седжвика (обе части). После этого сразу пошел на codility.com/train/ практиковаться. Нужно сказать, что тоже получил массу удовольствия :). Рекомендую.
А у меня было немного по-другому. Я сам приобрел диск 3-их Героев Клинок Армагедона и стал играть. Играл в основном с братом по HotSeat. Но дальше стали находиться друзья, которые тоже очень любили эту игру.
Помню, мог в легкую просидеть пару часов за телефоном, обсуждая юниты, замки, заклинания и т.д.
Эх… это было незабываемо!!!
Спасибо огромное автору за подаренные эмоции!
Я тоже нашел время и написал свою версию этого парсера. Вот: github.com/dendibakh/LLParser.
Потратил около 3-4 часов на разработку и 1-2 часа на рефакторинг. Но по-моему вышло очень красиво!
Спасибо за статью!
Зачастую бывает тяжело разобраться в таких конструкциях, а главное понять зачем именно так сделано. Но здесь все объяснено довольно доходчиво!
Начинаю использовать boost в работе, поэтому подобные статьи были бы очень кстати.
Посмотрел еще раз боевой код.
Здесь концепция такая: каждый объект класса является записью в некотором общем списке. Поэтому список статический, а итератор нет. Итератор является приватным членом класса. По сути этот класс представляет собой кэш. Там еще есть подсчет ссылок, поэтому две одинаковые записи списка не будут помещены в него дважды, плюс еще несколько дополнений, но я их убрал для упрощения.
Прошу прощения если я выбрал не самые понятные имена классов и методов. Хотел показать лишь саму ошибку.
Для временных, экспериментальных нужд и итератор можно сделать static, чтобы первая схема линковки работала.
Но, согласитесь, в реальном коде Вы так специально делать не будете. А это пример из боевого кода, который привел к ошибке, которую я целый день ловил!
Помню, мог в легкую просидеть пару часов за телефоном, обсуждая юниты, замки, заклинания и т.д.
Эх… это было незабываемо!!!
Спасибо огромное автору за подаренные эмоции!
Потратил около 3-4 часов на разработку и 1-2 часа на рефакторинг. Но по-моему вышло очень красиво!
Зачастую бывает тяжело разобраться в таких конструкциях, а главное понять зачем именно так сделано. Но здесь все объяснено довольно доходчиво!
Начинаю использовать boost в работе, поэтому подобные статьи были бы очень кстати.
Здесь концепция такая: каждый объект класса является записью в некотором общем списке. Поэтому список статический, а итератор нет. Итератор является приватным членом класса. По сути этот класс представляет собой кэш. Там еще есть подсчет ссылок, поэтому две одинаковые записи списка не будут помещены в него дважды, плюс еще несколько дополнений, но я их убрал для упрощения.
Прошу прощения если я выбрал не самые понятные имена классов и методов. Хотел показать лишь саму ошибку.
Но, согласитесь, в реальном коде Вы так специально делать не будете. А это пример из боевого кода, который привел к ошибке, которую я целый день ловил!
Вот за эту фразу огромное Вам спасибо!!!
Предлагаю оставить выбор способа определения для разработчика. Хорошо когда выбор есть, плохо когда его нет.