0

私の新しいプロジェクトでは、データ管理モジュールを構築しています。単純なテンプレート ストレージ タイプを上位層に提供したいと考えています。

template<typename T>
class Data
{
 public:
  T getValue();
 private:

 boost::numeric::ublas::matrix<T> data;
}

私の目的は、Boost.inter プロセス アロケーターや Boost.pool アロケーター (Boost Ublas Matrix および vector クラスはアロケーターをテンプレート パラメーターとして受け取る) のようないくつかの異なるアロケーターでデータのアロケーターを変更することです。カバーの下の適切なアロケータ.仮想基本クラスは素晴らしいかもしれませんが、テンプレートでそれを使用する方法を処理できませんでした.どのようなデザインパターンまたはソリューションを提供していますか?

編集:

私はboost.poolとboost.shared_memory_allocatorを使用します.簡単に言えば、異なる割り当て戦略を持つ異なるクラスが必要です.しかし、私のポイントは、プログラムの上部にはそれについての知識がないはずです.同一の基本クラス。

編集:カスタムアロケータでマトリックスクラスを使用したい人向け。

それはこのようなものです:

 using boost::numeric::ublas;

    template<typename T, class Allocator = boost::pool_allocator<T>>
    class
    {      
      public:
      matrix<T, row_major, std::vector<T,Allocator>> mData;
    }
4

2 に答える 2

0

何が欲しいのかはっきりしていませんが、暗闇の中でのショットとして、以下は役に立ちますか?

template<typename T>
class IData
{
 public:
  virtual T getValue() = 0;
  virtual ~IData() {}
};

template<typename T, typename Allocator=std::allocator<T> >
class Data : public IData<T>
{
 public:
  virtual T getValue();
 private:

 boost::numeric::ublas::matrix<T, Allocator> data;
}
于 2009-04-07T19:23:40.197 に答える
0

タイプに基づいてコンパイル時にアロケーターを交換しようとしていますか? if-elseテンプレートといくつかのアロケーター クラス (テンプレート) 定義が必要です。

ランタイム アロケーターが必要な場合は、簡単です。基本クラス (インターフェイス定義クラス) をテンプレートに配置し、満たす必要のある条件に基づいて適切なサブクラスを渡します。

于 2009-04-07T18:43:41.090 に答える