Статья: Альтернативные Интерфейсы

};

В список будут помещаться указатели на имена, а не сами объекты имена. Это позволяет использовать небольшое информационное поле e slist"а, и дает возможность имени находиться одновременно более чем в одном списке. Вот определение класса nlist, который очень просто выводится из класса slist:

#include "slist.h"

#include "name.h"

struct nlist : slist {

void insert(name* a) { slist::insert(a); }

void append(name* a) { slist::append(a); }

name* get() {}

nlist(name* a) : (a) {}

};

Функции нового класса или наследуются от slist непосредственно, или ничего не делают кроме преобразования типа. Класс nlist - это ничто иное, как альтернативный интерфейс класса slist. Так как на самом деле тип ent есть void*, нет необходимости явно преобразовывать указатели name*, которые используются в качестве фактических параметров .

Списки имен можно использовать в классе, который представляет определение класса:

struct classdef {

nlist friends;

nlist constructors;

nlist destructors;

nlist members;

nlist operators;

nlist virtuals;

// ...

void add_name(name*);

classdef();

~classdef();

};

и имена могут добавляться к этим спискам приблизительно так:

void classdef::add_name(name* n)

{

if (n->is_friend()) {

if (find(&friends,n))

К-во Просмотров: 426
Бесплатно скачать Статья: Альтернативные Интерфейсы