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

Трюк 0x000D — Рекурсивное наследование

mistificator
капелюх чарiвника
Практическая польза от данного трюка определённо должна быть. Как придумаете, как его использовать — сообщайте.


//------------------------------------------------------------
#include
using namespace std;

class A {
public:
A() {
cout << "ctor A" << endl;
}
virtual void foo() {
cout << "foo A" << endl;
}
};

template
class B: public T {
public:
B(): T() {
cout << "ctor B<" << typeid(T).name() << ">" << endl;
}
virtual void foo() {
cout << "foo B<" << typeid(T).name() << ">" << endl;
}
};

int main() {

A * a = new B < B < B < B < B < A > > > > > ( );
a->foo();

return 0;
}
//------------------------------------------------------------

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

22:56 

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

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

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

16:32 

Трюк 0x0008 — Never too late

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

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

05:02 

Трюк 0x0005 — Масштабируемый n-мерный массив

Куб 0
Ни для кого не секрет, что С++, являясь языком общего назначения, а не ориентированным на определенную предметную область, во многих аспектах содержит методы лишь начального, базового уровня. В частности, не нашедшей должного отражения в синтаксисе языка является тема динамически масштабируемых многомерных массивов. Идея внести в программу двумерный масштабируемый массив вызовет у программиста тревогу, трехмерный — раздражение, а при мысли о четырехмерных и прочих n-мерных массивах программист С++, скорее всего, посоветует заказчику проекта ориентироваться на другой язык программирования.
Однако, не все настолько мрачно. Хорошая новость заключается в том, что рекурсивное наследование шаблонов и перегрузка operator[] могут позволить изготовить класс, поддерживающий n-мерные массивы с возможностью их масштабирования, и всего того, что пожелает разработчик.
Читать дальше...

@темы: Трюки с шаблонами

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

главная