Есть некоторая иерархия классов(например, распределителей памяти), и есть некоторый другой класс, который должен пользоваться одним из этих распределителей, но каким — заранее неизвестно. Можно ли реализовать это через полиморфизм (и если да, то как указать, каким именно распределителем пользоваться?), или же тут придется использовать шаблоны?
Здравствуйте, 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 день! ...если дни — полярные.
Re[2]: Передача класса-члена иерархии как параметра
Здравствуйте, srggal, Вы писали:
S>В STL уже есть allocator, для чего придумываьт свой ?
Который является оберткой над operator new, operator delete. Смысл std::allocator'а — совместимость интерфейса со стандартными контейнерами. Никаких проблем обернуть свой аллокатор STL-совместимой оберткой не составляет (знаем, делали).
... << RSDN@Home 1.2.0 alpha rev. 619>>
Re[4]: Передача класса-члена иерархии как параметра
Здравствуйте, Глеб Алексеев, Вы писали:
ГА>Здравствуйте, srggal, Вы писали:
S>>В STL уже есть allocator, для чего придумываьт свой ?
ГА>Который является оберткой над operator new, operator delete. Смысл std::allocator'а — совместимость интерфейса со стандартными контейнерами. Никаких проблем обернуть свой аллокатор STL-совместимой оберткой не составляет (знаем, делали).
Здравствуйте, srggal, Вы писали:
S>>>В STL уже есть allocator, для чего придумываьт свой ? ГА>>Который является оберткой над operator new, operator delete. Смысл std::allocator'а — совместимость интерфейса со стандартными контейнерами. Никаких проблем обернуть свой аллокатор STL-совместимой оберткой не составляет (знаем, делали). S>Имелось ввиду в приведенном lLPl примере
commando попросил пример реализации взаимозаменяемых аллокаторов с применением статического и динамического полиморфизма, |LP| его привел, все ОК как-будто.
... << RSDN@Home 1.2.0 alpha rev. 619>>
Re[6]: Передача класса-члена иерархии как параметра
Здравствуйте, Глеб Алексеев, Вы писали:
ГА>commando попросил пример реализации взаимозаменяемых аллокаторов с применением статического и динамического полиморфизма, |LP| его привел, все ОК как-будто.
Я и не грил, что не Ок, просто выразил своё ИМХО касательно примера