c++ - 正确的继承/类结构

标签 c++

我想编写一个用于求解线性程序的库。因此使用了几个求解器,例如 cplex 或 gurobi。我已经拥有的是它们每个的接口(interface)(都包含将它们包装到求解器特定代码的相同函数)。

现在我想要一个可以实例化的类“LinearProgram”,例如通过 LinearProgram("cplex") 然后调用 cplex 求解器。

我的第一个想法是使用一个父类(super class)“求解器”,它是所有求解器接口(interface)的基类,包含各自的函数作为虚拟声明。但是后来我得到了一个无法实例化的抽象类。 因此,在 LinearProgram 中,我希望有一个变量 Solver,它根据构造函数中给定的字符串进行实例化。

我确信一个合适的解决方案是显而易见的,但我目前所能想到的一切并不令人满意。

感谢您的帮助。

最佳答案

这说明了您所描述的内容:

class Solver {
...abstract base
};

class SolverFactory {
public:
    Solver* NewSolverWithName(const std::string& pSolverName);
};

class LinearProgram {
public:
    LinearProgram(const std::string& pSolverName) :
      d_solver(SolverFactory::NewSolverWithName(pSolverName)) {
    }
private:
    some_auto_pointer<Solver> d_solver;
};

class cplex_Solver : public Solver {
...
    static std::string Name();
};

Solver* SolverFactory::NewSolverWithName(const std::string& pSolverName) {
    if (pSolverName == cplex_Solver::Name()) {
      return new cplex_Solver();
    }
    ...
}

关于c++ - 正确的继承/类结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13239350/

相关文章:

C++ 模板字符串连接

c++ - 具有多个参数的 Map.emplace C++ 17

c++ - 修改指向另一个指针的指针

c++ - Kafka消费者投票最新消息

c++ - Xamarin.Forms + native 库 OpenCV

c++ - C/C++ 应用程序项目 (NetBeans) 中的多个源文件

c++ - C++代码中的奇怪运算符

c++ - MySQL 服务器端超时

c++ - 我如何使用带有 "this"的 const 函数

C++结构重新定义编译器错误