0

数値でパラメータ化されたクラスがありますが、実際には一部の値のみが有効なパラメータです。ユーザーから実装を隠し、無効なインスタンス化を防ぐために、次のようにしました。

// 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;
}

より良い回避策はありますか? この例は単純化して抽象化していますが、多数の有効なインスタンスを保存する必要もありません。

4

2 に答える 2

1

どこまでいっても合法です。代わりに列挙型でクラスをパラメーター化してみてください。これは、クラス内でケースになります。状況の詳細に応じて、投稿した内容よりも多かれ少なかれ読みやすい場合があります。

于 2012-11-05T14:18:33.667 に答える