私はこれをC++でどのように実現するのかよく分かりませんが、自分のコアライブラリを活用するプラグインから特定の種類のオブジェクトを要求すると、私のライブラリのユーザがシングルトンオブジェクトを提供しないようにします。私はさまざまなバリエーションを試しましたが、これはC++のテンプレート化されたファクトリでの実装での私の現在の試みです。ファクトリテンプレートの工場
質問はFooProvider.hスタブにコメントとして埋め込まれています。ありがとう!
/*
* IFooProvider.h
*/
//Interface - Factory for different variations of IFoo
class IFooProvider
{
virtual std::shared_ptr<IFoo> getProvidedFoo();
}
//===========================================================================
/*
* FooProvider.h
*/
template <typename T> //Not sure how to enforce that T is derived from IFoo?
class FooProvider : public IFooProvider
{
std::shared_ptr<IFoo> getProvidedFoo()
{
//This doesn't work.
//Not sure how to perform this cast or if this is even possible?
std::shared_ptr<IFoo> rtn = std::make_shared<T>();
return rtn;
}
}
//===========================================================================
//Other team's implementation version. Exists in a different library that I have no control over.
/*
* MyFooProvider.h
*/
class MyFooProvider : public FooProvider<MyFoo>
{
//Nothing really going on here. Just want to implement a provider for MyFoo
}
//===========================================================================
ファクトリメソッドまたはテンプレートクラスを使用してデザインしますが、両方をデザインすることはできません。ファクトリメソッドを使用すると、最小限のパラメータを指定することで、継承されたオブジェクトと登録されたオブジェクトを作成できます。 – seccpur
あなたのコード(コードが不足している)[works](http://cpp.sh/8mx6i) –