gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:58:52 25 4
gpt4 key购买 nike

我想编写一个用于求解线性程序的库。因此使用了几个求解器,例如 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com