模板化的唯一指针



我对C++很陌生。

我有一个名为Main_Alg的类,它运行(通用(主算法。我有不同的类,基类Calc_Type和两个派生类说类A和类B

创建Main_Algrun将运行通用算法,方法求解为 AB(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>();

相关内容

  • 没有找到相关文章

最新更新