Ситуация: нужно в зависимости от значения переменной (члена класса 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;
В общем, проблема возникает из-за того, что нужно в зависимости от значения переменной (т.е. известного на момент исполнения) выбирать тот или иной тип (т.е. статических данных). Думаю, что проблема известная. Известны ли кому-нибудь менее корявые способы ее решить?