Re: абстрактный класс + шаблоны; альтернатива
От: remark Россия http://www.1024cores.net/
Дата: 10.10.07 08:46
Оценка:
Здравствуйте, pasenger, Вы писали:

P>Ситуация: нужно в зависимости от значения переменной (члена класса bool isTrue_, задаваемого извне) выбирать тот или иной


Можешь элиминировать уровень абстракции, и вместо этого:

P>
P>template<bool isTrue> class Container;

P>struct IFoo
P>{
P>    virtual void insert(int arg) = 0;
P>    virtual ~IFoo() {};
P>};

P>template <bool isTrue> class Foo : public IFoo
P>{
P>public:
P>    void insert(int arg) { cont_.insert(arg); }
P>private:
P>    Container<isTrue> cont_;
P>};
P>



Написать сразу:

struct IContainer
{
  virtual void insert(int arg) = 0;
  virtual ~IContainer() {};
};

template<bool isTrue>
class Container : public IContainer
{
  //...
};



Проще и локаничнее.



1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[5]: абстрактный класс + шаблоны; альтернатива
От: Кодт Россия  
Дата: 10.10.07 09:23
Оценка: :)
Здравствуйте, Erop, Вы писали:

E>Ну вот, а говорили: "С++! Функциональный язык"


И продолжают говорить.
У нас есть цепочка функций:
— диалог с пользователем
— преобразование
— отображение

Поскольку старый вектор (несортированный) прекращает своё существование в момент упорядочивания, а новый — упорядоченный — возникает, то можно прибегнуть к трюку: размещение нового поверх старого. Естественно, что все ссылки на старый инвалидируются (!).

... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
Re[4]: абстрактный класс + шаблоны; альтернатива
От: pasenger  
Дата: 10.10.07 11:10
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Секундочку! У тебя есть действия:

К>- получить (из диалога с пользователем) неупорядоченный набор
К>- упорядочить его перед визуализацией
К>и уже затем, в вечности:
К>- отображать
К>- обрабатывать

К>В таком случае вообще пофигу, какой контейнер использовать. Используй вектор — у него цена произвольного доступа самая маленькая.


И правда что. Надо же, а уже столько кода наворотил — теперь переделывать. В любом случае, спасибо

К>Чекбокс, таким образом, влияет только на первичную обработку.

К>
К>template<class Cont>
К>void process(Cont& cont, bool eliminate)
К>{
К>    std::sort(cont.begin(), cont.end());
К>    if(eliminate)
К>        cont.erase(std::unique(cont.begin(), cont.end()), cont.end());
К>}
К>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.