2009-04-07 5 views
0

を私の新しいプロジェクトで、私は動的::ブーストにベクトルを割り当て方法を変更し、後押し::行列

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

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

のような上位層への単純なテンプレート記憶タイプを与えたいmodule.Iデータ管理を構築していますマイ目的は、Boost.interプロセスアロケータやBoost.poolアロケータなどのいくつかの異なるアロケータを使ってデータのアロケータを変更することです(Boost Ublasの行列とベクトルクラスはテンプレートパラメータとしてアロケータを使用します)。アロケータのカバー。仮想基本クラスは甘いかもしれませんが、私はテンプレートでそれを使用する方法を処理できませんでした。どのようなデザインパターンやソリューションを提供していますか?

編集:私は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; 
    } 

答えて

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

申し訳ありませんが、わかりましたが、あなたの方法は実現可能です。 – Qubeuc

+0

クール:)喜んで助けてください –

0

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

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

関連する問題