Здравствуйте, 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
{
//...
};
Проще и локаничнее.
Здравствуйте, Erop, Вы писали:
E>Ну вот, а говорили: "С++! Функциональный язык"
И продолжают говорить.
У нас есть цепочка
функций:
— диалог с пользователем
— преобразование
— отображение
Поскольку старый вектор (несортированный) прекращает своё существование в момент упорядочивания, а новый — упорядоченный — возникает, то можно прибегнуть к
трюку: размещение нового поверх старого. Естественно, что все ссылки на старый инвалидируются (!).
... << RSDN@Home 1.2.0 alpha rev. 655>>
Здравствуйте, Кодт, Вы писали:
К>Секундочку! У тебя есть действия:
К>- получить (из диалога с пользователем) неупорядоченный набор
К>- упорядочить его перед визуализацией
К>и уже затем, в вечности:
К>- отображать
К>- обрабатывать
К>В таком случае вообще пофигу, какой контейнер использовать. Используй вектор — у него цена произвольного доступа самая маленькая.
И правда что. Надо же, а уже столько кода наворотил — теперь переделывать. В любом случае, спасибо
К>Чекбокс, таким образом, влияет только на первичную обработку.
К>К>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());
К>}
К>