Я не уверен, как это сделать в C++, но я хочу, чтобы пользователи моей библиотеки не предоставляли объекты singleton, когда я запрашиваю определенный вид объекта из своего плагина, который использует мои основные библиотеки. Я пробовал кучу вариаций, но это моя текущая попытка реализации на шаблонной фабрике в C++.factory templated class
Вопросы вставляются как комментарии в FooProvider.h stub. Благодаря!
/*
* 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
}
//===========================================================================
Либо вы создаете, используя заводские методы или класс шаблонов, но не оба. Метод Factory должен позволять вам создавать наследованные и зарегистрированные объекты, предоставляя минимальные параметры. – seccpur
ваш код (с отсутствующим кодом добавлен) [работает] (http://cpp.sh/8mx6i) очень хорошо. –