Ознакомьтесь с нашей политикой обработки персональных данных
  • ↓
  • ↑
  • ⇑
 
Записи с темой: нетривиальный вызов (список заголовков)
22:56 

Трюк 0x000C — Константные вычисления и компилятор bcc32

mistificator
капелюх чарiвника
Давно имелись подозрения, что не всё гладко в реализации шаблонов в компиляторе Borland'a (bcc32, Borland C++ Compiler). Borland благополучно отошёл от разработки компиляторов, предоставив свои детища CodeGear'у. Те немного подретушировали компилятор, подправив в нём откровенные несоответствия современным стандартам С++ (добавив, в частности, поддержку неименованных union как в MSVC++), но некоторые проблемы с реализацией шаблонов всё же остались.
Одна из них заключается в том, что приведенный ниже код не компилируется компилятором bcc32.
Читать дальше...

@темы: Нетривиальный вызов, Трюки с шаблонами

00:06 

Трюк 0x000B — Функцию вызывали?

Куб 0
Жесткая типизация в языке С++ подчас создаёт непреодолимые трудности. Например, вы, программист-разработчик, и занимаетесь реализацией некоего модульного проекта. Предположим, что это звуковой редактор с плагинами. Плагины вы реализуете в виде .dll, которые динамически подключаются при загрузке редактора. И всё бы ничего, но функции плагинов настолько разнообразны и разноплановы, что описать их в некоем формализованном виде просто нереально. В самом деле, представьте: один плагин принимает пять параметров, возвращает три; другой плагин принимает десять входных аргументов, и не выдает ни одного, зато пишет файл и рисует график на экране. Как быть в таком случае?
Читать далее...

@темы: Asm & C++, Нетривиальный вызов

16:32 

Трюк 0x0008 — Never too late

Куб 0
В устоявшуюся терминологию программистов C++ входят понятие раннего связывания (на стадии компиляции) и понятие позднего, отложенного связывания (динамически, во время исполнения). Далее в статье будет предложено решение для не просто позднего, а по-настоящему запоздалого связывания данных. Представьте, что Вы можете выбирать обработчик для данных прямо во время выполнения программы и, более того, ассоциировать с данными несколько обработчиков. Представьте, что при этом работает полиморфизм. Представьте, что если Вам более не нужны выдаваемые объектом данные, Вы можете "отключиться" от объекта, как клиент от сервера.
Как такое реализовать?
Читать далее...

@темы: Нетривиальный вызов, Трюки с наследованием, Трюки с шаблонами, Философия

14:00 

Трюк 0x0002 — Автоматическое выполнение операций

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

@темы: Лень как двигатель прогресса, Нетривиальный вызов

Записная книжка программиста C++

главная