使控制器能够在C++中同时使用到不同的存储库

使控制器能够在C++中同时使用到不同的存储库,c++,oop,C++,Oop,这在Python中非常简单,现在对我来说成了一个真正的问题 我的课程结构如下: 域基本数据结构 存储库 需要存储库才能工作的控制器 我的控制器构造函数是: Controller::Controller(Repository *repo) { this->repo = repo; } 现在我有了另一个存储库来管理一些文件。我想使用相同的控制器,但我以前的工作方式是错误的,因为我不能 问题可能在于: class Controller { private: Repository

这在Python中非常简单,现在对我来说成了一个真正的问题

我的课程结构如下: 域基本数据结构 存储库 需要存储库才能工作的控制器

我的控制器构造函数是:

Controller::Controller(Repository *repo)
{
    this->repo = repo;
}
现在我有了另一个存储库来管理一些文件。我想使用相同的控制器,但我以前的工作方式是错误的,因为我不能

问题可能在于:

class Controller
{
private:
    Repository *repo;
//blah blah blah
我怎样才能使它尽可能的通用?我觉得这里缺少了一些基本的OOP原则

有些同事是这样做的:

class Controller
{
private:
    Repository *memoryRepository;
    FileRepository *fileRepository;
}
他们只是选择哪一个将与很多很多if-else语句一起使用。必须有一种更优雅的方式来做到这一点

基本上,我希望能够做这样的事情。 假设用户可以选择是从文件加载和保存数据,还是只使用内存

if(useFiles == true)
{
    FileRepository *fileRepo = new FileRepository();
    Controller *controller = new Controller(fileRepo);
    ConsoleUI *ui = new ConsoleUI(controller);
}
else
{
    Repository *repo = new Repository();
    Controller *controller = new Controller(repo);
    ConsoleUI *ui = new ConsoleUI(controller);
}
我想我可以为我的控制器类使用模板

template<typename R>
class Controller
{
private:
    R *repo;
现在我可以写这样的东西了 Repository*r=新文件存储库


我认为这是我问题的正确答案。有任何反馈吗?

您的Controller::Controller内存泄漏。您要使用“新建”或“分配”进行分配。但你真的应该考虑使用智能指针。使用向量而不是单个指针来允许多个存储库。如果控制器有多个存储库,你希望控制器如何确定它应该使用哪个存储库?@Lisheeste我根据我的需要为他创建了一个不同的存储库@Crashstr指出,控制器的构造函数显然是错误的。您有两个连续的语句为同一成员变量赋值。你能解释一下你认为这些陈述在做什么吗?这样我们就可以告诉你如何实现你的目标。
class FileRepository: public Repository