動的ベクトル::ブーストに配分戦略を変更し、後押し::行列を
-
05-09-2019 - |
質問
私の新しいプロジェクトで、私は、データ管理は、
のような上位層に単純なテンプレートのストレージタイプを与えたい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
テンプレートといくつかのアロケータクラス(テンプレート)の定義を必要と思います。
、それは簡単です:あなたはテンプレートで、基本クラス(インタフェース定義クラス)を入れて、あなたが達成するために必要なものは何でも条件に基づいて適切なサブクラスを渡すと思います。
。所属していません StackOverflow