我正在做科学计算,而且我是初学c ++.MyNLP是一个包含所有问题数据和方法的类.我正在使用第三方库进行数值优化.每个第三方都是一个解决我问题的特定算法.为了使用每个库,我的MyNLP类需要从第三方库继承相应的类.
例如,
Class MyNLP :public IPOPT
{
};
Run Code Online (Sandbox Code Playgroud)
使我能够使用IPOPT算法来解决我的问题.同样的,
class MyNLP: public SQP
{
};
Run Code Online (Sandbox Code Playgroud)
使我能够使用SQP算法.
但就我而言,只有在运行时,程序才会决定它应该继承哪个类.我必须继承第三方课程之一.任何人都可以在cpp中实现这一目标吗?
我正在尝试使用模板,但无法理解以下代码有什么问题。
解决.h
#include "nlp.h"
#include "Ipopt_solve.h"
enum algo_type {IPOPT =1, SQP};
template<int ALG>
class solve
{
public:
solve()
{
}
};
template<>
class solve<IPOPT>
{
public:
solve(nlp*);
private:
Ipopt_solve m_ipopt;
};
Run Code Online (Sandbox Code Playgroud)
解决.cpp
template<>
solve<IPOPT>::solve(nlp* problem): m_ipopt(problem)
{
}
Run Code Online (Sandbox Code Playgroud)
Ipopt_solve是抽象类的子类TNLP。Ipopt_solve使用对nlp类的引用进行初始化。
来自 main.cpp
nlp problem(&model);
solve<IPOPT> solution(&problem);
Run Code Online (Sandbox Code Playgroud)
我收到如下所示的错误。
错误:模板 id 'solve<>' for 'solve<1>::solve(nlp*)' 不匹配任何模板声明 solve::solve(nlp* problem): m_ipopt(problem)