ファクトリメソッドの設定の一種として、それぞれ異なるタイプのオブジェクトを作成しますが、共通のインタフェースを満たすファンクタを登録する必要があります。つまり、すべてコアクラスをサブクラス化するオブジェクトを作成します。各FactoryMethod
テンプレートの特殊化は別のタイプであるので、私は(IIRC)std::map<std::string,FactoryMethod*>
を持つことができません異なるテンプレートパラメータを持つテンプレートオブジェクトのコレクション
template <class T> struct FactoryMethod
{
X* create();
}
:
は、私のようなものを持っていると言います。しかし、私はは行うことができます:
struct IFactoryMethod
{
virtual X* create()=0;
};
template <class T> struct FactoryMethod : public IFactoryMethod
{
virtual X* create();
};
std::map<std::string,IFactoryMethod*> factories;
右の? STLには、私がブーストしているとは思うが、これをもっと細かくする方法があることは分かっていない。しかし、今はブーストを使用せず、とにかく興味がある。
考え方はfactories
で、正しいタイプを作成するためにタイプ名(XMLなどから読み取る)に基づいて検索できます。
それは擬似コードです、私に休憩を与えてください!あなたは "所有権を強制するポインタ"を明確にすることはできますか? –
彼は基本的にあなたに生のポインタを使わないように伝えていますが、shared_ptrやunique_ptr を使うとポインタを安全に使うことができます。それらはboostから来て、std :: tr1またはstd in C++ 0xで見つけることもできます。あなたはここで見てみることができます:http://www.boost.org/doc/libs/1_38_0/doc/html/boost/interprocess/unique_ptr.html –
MatiasFG
pah、男性はポインタを恐れていない! –