Передача класса-члена иерархии как параметра
От: commando Россия  
Дата: 28.11.05 20:09
Оценка:
Скажите, как реализовать такую вещь:

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

Надеюсь на вашу помощь.
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 день! ...если дни — полярные.
Re[2]: Передача класса-члена иерархии как параметра
От: commando Россия  
Дата: 28.11.05 22:26
Оценка:
Спасибо, теперь все ясно. Странно, что сам не разобрался
Re[2]: Передача класса-члена иерархии как параметра
От: srggal Украина  
Дата: 29.11.05 09:36
Оценка:
Здравствуйте, lLPl, Вы писали:

[]
В STL уже есть allocator, для чего придумываьт свой ?
... << RSDN@Home 1.1.4 stable rev. 510>>
Re[3]: Передача класса-члена иерархии как параметра
От: Глеб Алексеев  
Дата: 29.11.05 09:46
Оценка:
Здравствуйте, srggal, Вы писали:

S>В STL уже есть allocator, для чего придумываьт свой ?

Который является оберткой над operator new, operator delete. Смысл std::allocator'а — совместимость интерфейса со стандартными контейнерами. Никаких проблем обернуть свой аллокатор STL-совместимой оберткой не составляет (знаем, делали).
... << RSDN@Home 1.2.0 alpha rev. 619>>
Re[4]: Передача класса-члена иерархии как параметра
От: srggal Украина  
Дата: 29.11.05 09:52
Оценка:
Здравствуйте, Глеб Алексеев, Вы писали:

ГА>Здравствуйте, srggal, Вы писали:


S>>В STL уже есть allocator, для чего придумываьт свой ?


ГА>Который является оберткой над operator new, operator delete. Смысл std::allocator'а — совместимость интерфейса со стандартными контейнерами. Никаких проблем обернуть свой аллокатор STL-совместимой оберткой не составляет (знаем, делали).


Имелось ввиду в приведенном lLPl примере
... << RSDN@Home 1.1.4 stable rev. 510>>
Re[5]: Передача класса-члена иерархии как параметра
От: Глеб Алексеев  
Дата: 29.11.05 09:57
Оценка:
Здравствуйте, 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]: Передача класса-члена иерархии как параметра
От: srggal Украина  
Дата: 29.11.05 11:59
Оценка:
Здравствуйте, Глеб Алексеев, Вы писали:

ГА>commando попросил пример реализации взаимозаменяемых аллокаторов с применением статического и динамического полиморфизма, |LP| его привел, все ОК как-будто.


Я и не грил, что не Ок, просто выразил своё ИМХО касательно примера
... << RSDN@Home 1.1.4 stable rev. 510>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.