質問

私の新しいプロジェクトで、私は、データ管理は、

のような上位層に単純なテンプレートのストレージタイプを与えたいmodule.I構築しています
template<typename T>
class Data
{
 public:
  T getValue();
 private:

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

私の目的はBoost.interプロセスアロケータまたはBoost.poolアロケータのようないくつかの異なるアロケータとのデータのアロケータを変更(ブーストUblas行列やベクトルクラスはテンプレートパラメータとしてアロケータを取る).ANDのみ単一のクラスや工場を与えることであり、 cover.A仮想基底クラスの下で適切なアロケータを作成するための方法が甘いかもしれないが、私はデザインパターンやソリューションのtemplates.What種類とそれを使用する方法を扱うことができませんでしたあなたは提供していますか?

編集ます:

私のためit.Real課題についての知識がないはずです。

私は私が私のポイントは、プログラムの上部であるstrategies.But異なる配分で異なるクラスを持ちたいboost.poolとboost.shared_memory_allocator.Brieflyを使用する別のテンプレートを収集することです同じ基底クラスを持つクラスます。

編集: カスタムアロケータと行列クラスを使用するもののために。

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

 using boost::numeric::ublas;

    template<typename T, class Allocator = boost::pool_allocator<T>>
    class
    {      
      public:
      matrix<T, row_major, std::vector<T,Allocator>> mData;
    }
役に立ちましたか?

解決

それはあなたが望むものは明らかではないですが、暗闇の中でショットとして、以下の役に立つのですか?

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

他のヒント

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

あなたは、ランタイム・アロケータをしたい場合は、

、それは簡単です:あなたはテンプレートで、基本クラス(インタフェース定義クラス)を入れて、あなたが達成するために必要なものは何でも条件に基づいて適切なサブクラスを渡すと思います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top