С++ - язык, который изучается постепенно.Арифметические операции с указателями
                   Справочники Всё для создания сайта

Ссылки


Home
Бизнес
Справочники
Советы







Материалы книги получены с http://www.itlibitum.ru/

Иерархия умных указателей

Вместо использования шаблонов можно поддерживать параллельные иерархии указателей и объектов, на которые они указывают. Делать это следует лишь в том случае, если ваш компилятор не поддерживает шаблоны или плохо написан.

class PVoid { // Заменяет void*

protected:

void* addr;

public:

PVoid() : addr(NULL) {}

PVoid(void* a) : addr(a) {}

operator void*() { return addr; }

};

class Foo : public PVoid {

public:

PFoo() : PVoid() {}

PFoo(Foo* p) : PVoid(p) {}

operator Foo*() { return (Foo*)addr; }

Foo* operator->() { return (Foo*)addr; }

77

};

class Pbar : public PFoo {

public:

PBar() : PFoo() {}

PBar(Bar* p) : PFoo(p) {}

operator Bar*() { return (Bar*)addr; }

Bar* operator->() { return (Bar*)addr; }

};

pBar pb(new Bar);

pFoo pf(pb); // Работает, потому что PBar является производным от PFoo

pf->MemberOfFoo(); // Работает благодаря PFoo::operator->

Этот вариант будет работать, если вас не огорчают многочисленные копирования/вставки текста и (в зависимости от компилятора) предупреждения о том, что РВаr::operator->() скрывает PFoo::operator->(). Конечно, такое решение не настолько элегантно, как встроенные типы указателей шаблона Ptr.


Назад    Содержание    Далее    

Home  Создание сайтов  Учебник по записи CD  Справочник Web дизайнера Самоучитель IE PHP и MySQL Компьютерные сети С++ E-mail me

Copyright 2007. Климов Александр. All Right Reserved.
Hosted by uCoz