абстрактный класс + шаблоны; альтернатива
От: pasenger  
Дата: 09.10.07 11:35
Оценка:
Ситуация: нужно в зависимости от значения переменной (члена класса bool isTrue_, задаваемого извне) выбирать тот или иной

Некоторому классу извне устанавливают переменную.

SomeClass sc;
sc.setTrue(true);

...

class SomeClass
{
...
public:
void setTrue (bool isTrue) { isTrue_ = isTrue; }
private:
bool isTrue_;
};

Внутри класса SomeClass в зависимости от значения isTrue_ нужно выбрать тип некотрого другого закрытого поля данных. По этому поводу сделан класс
template<bool isTrue> class Container;

И дальше не слишком красивая конструкция.
struct IFoo
{
    virtual void insert(int arg) = 0;
    virtual ~IFoo() {};
};

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

Пользуются ей так.
IFoo* foo;
if (isTrue_)
    foo = new Foo<true>;
else
    foo = new Foo<false>;
    
...

foo->insert(k);

...

delete foo;


В общем, проблема возникает из-за того, что нужно в зависимости от значения переменной (т.е. известного на момент исполнения) выбирать тот или иной тип (т.е. статических данных). Думаю, что проблема известная. Известны ли кому-нибудь менее корявые способы ее решить?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.