Здравствуйте, 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;