小编use*_*630的帖子

在运行时从任何多个类中选择性地继承

我正在做科学计算,而且我是初学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中实现这一目标吗?

c++ oop inheritance

11
推荐指数
4
解决办法
823
查看次数

模板类专业化:模板 ID 不匹配任何模板声明

我正在尝试使用模板,但无法理解以下代码有什么问题。

解决.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是抽象类的子类TNLPIpopt_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)

c++ templates template-specialization

3
推荐指数
1
解决办法
130
查看次数