数値でパラメータ化されたクラスがありますが、実際には一部の値のみが有効なパラメータです。ユーザーから実装を隠し、無効なインスタンス化を防ぐために、次のようにしました。
// foo.hpp
class IClass
{
virtual void doStuff() = 0;
};
IClass& getHiddenClass(const bool& randomCondition);
// foo.cpp
template <unsigned x>
class HiddenClass : public IClass
{
public:
void doStuff()
{
/* some code using x */
}
};
IClass& getHiddenClass(const bool& randomCondition)
{
static HiddenClass<42> ifRandomCondition;
static HiddenClass<9000> ifNotRandomCondition;
if (randomCondition)
return ifRandomCondition;
else
return ifNotRandomCondition;
}
より良い回避策はありますか? この例は単純化して抽象化していますが、多数の有効なインスタンスを保存する必要もありません。