我对C++很陌生。
我有一个名为Main_Alg
的类,它运行(通用(主算法。我有不同的类,基类Calc_Type
和两个派生类说类A
和类B
。
创建Main_Alg
时run
将运行通用算法,方法求解为 A
或 B
(Calc_Type
中是纯虚的(。执行哪一个由用户指定。
实现这一目标的最佳方法是什么?
我想到了一个模板类Main_alg
:
if (parms == "A"){
std::unique_ptr<Main_Alg<A>> main_alg(new Main_alg<A>);
main_alg -> run;
}
else ... // for B or whatever
运行中:
std::unique_ptr<T> method;
method -> solve;
method -> getsmthg; //method only implemented for base class Calc_type `
这会不会让事情过于复杂?这是好的做法吗?也感谢任何阅读建议
如果您是C++新手,请不要编写自己的模板。它们很酷,但很难掌握,尤其是当您开始使用C++编码时。
你写了一些关于纯虚拟课堂的东西。如果你有它,那么你就不需要模板。
class Calc_Type {
virtual ~Calc_Type() {}
virtual void run() = 0;
};
class A : public Calc_Type {
public:
void run() override {
stuff_to_do();
}
};
class B : public Calc_Type {
public:
void run() override {
other_stuff_to_do();
}
};
std::unique_ptr<Calc_Type> createJob(const std::string& name)
{
if (name = "A") {
return std::make_unique<A>();
} else if (name = "B") {
return std::make_unique<B>();
}
return std::make_unique<NoJob>();
}
// somewhere in the code:
auto job = createJob(userInput);
...
job->run();
std::unique_ptr<Main_Alg> main_alg(new Main_alg<A>;
这是不可能的。 Main_alg
可以是类模板,也可以是类。不能两者兼而有之。std::unique_ptr
的第一个模板参数是模板类型参数;不是模板模板参数。
我认为以下函数模板可能是合适的:
template<class T>
void run()
{
Main_Alg<T> m;
m.run();
}
并致电:
if (parms == "A"){
run<A>();
else
run<B>();