Re: Передача класса-члена иерархии как параметра
От: lLPl  
Дата: 28.11.05 22:08
Оценка:
Здравствуйте, commando, Вы писали:

C>Скажите, как реализовать такую вещь:


C>Есть некоторая иерархия классов(например, распределителей памяти), и есть некоторый другой класс, который должен пользоваться одним из этих распределителей, но каким — заранее неизвестно. Можно ли реализовать это через полиморфизм (и если да, то как указать, каким именно распределителем пользоваться?), или же тут придется использовать шаблоны?


C>Надеюсь на вашу помощь.


Я себе это примерно так представляю.
С помощью полиморфизма:
//Абстрактный базовый класс для аллокаторов
class allocator_base
{
public:
    //...
    virtual ~allocator_base() = 0;
};

class foo
{
    allocator_base* palloc;
    //...
public:
    foo(allocator_base* pa)
    :palloc(pa)
    {
        //...
    }
    ~foo()
    {
        delete palloc;
        //...
    }
    //...
};

class concrete_alloc : public allocator_base
{
    //...
    //переопределяем виртуальные функции
};

class another_alloc : public allocator_base
{
    //...
    //переопределяем виртуальные функции
};


//используем
foo f1(new concrete_alloc);
foo f2(new another_alloc);


С помощью шаблонов:
template<class Alloc>
class foo
{
    Alloc alloc;
  //...  
};

class some_alloc {...};
class another_alloc {...};

//используем
some_alloc sa;
foo<some_alloc> f1;

another_alloc aa;
foo<another_alloc> f2;
C++ можно выучить за 21 день! ...если дни — полярные.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.