gpt4 book ai didi

c++ - 使用工厂方法合并不同的类(c++)

转载 作者:行者123 更新时间:2023-11-28 00:01:41 25 4
gpt4 key购买 nike

我给出以下代码来说明我的问题:

class Basic 
{
public:
Basic();
~Basic();
};

class ExtendA: public Basic
{
public:
class Para
{
};
Para para_;

};
class ExtendB: public Basic
{
public:
class Para
{

};
Para para_;
};

enum Method
{
MedExtendA,
MedExtendB,
MedExtendAVar1,
MedExtendBVar1
};

class Enginee
{
public:
class Para()
{
public:
ExtendA::Para paraA_;
ExtendB::Para paraB_;
};
Para paraEnginee_;
Enginee(Method med)
{
switch(med):
{
case MedExtendA:
pBasic.reset(new ExtendA());
break;
case MedExtendAVar1:
pBasic.reset(new ExtendA());
ExtendA *p = dynamic_cast<ExtendA *> (pBasic.get());
p.para_ = ; // set the parameter
break;
case MedExtendB:
...
break;
case MedExtendBVar1:
...
break;

}
}
~Enginee()
{
}
boost::shared_ptr<Basic> pBasic;
};

从上面的例子可以看出,Basic是基类,ExtendAExtendB是基于的派生类基本类。 class Enginee 是一个工厂类,方便调用其他类。之所以需要 Enginee 类可以在下面的例子中说明:

没有 Enginee 类:

ExtendA objA;
objA.para_ /// parameter setting
objA.do_something();

使用 Enginee 类:

   Enginee myEngine(MedExtendAVar1);
myEngine.do_something();

总之,使用工厂方法构造一个Enginee类,为ExtendAExtendB类的使用提供了一个统一的接口(interface)。在上面的示例中,根据参数设置,我们可以创建不同种类的类,这些类可以很容易地调用。但是,这也使代码更加复杂。所以这是我的问题:还有其他替代解决方案吗?提出的解决方案有什么问题?

最佳答案

Is factory method the only way of incorporating different classes?

没有。

我不太确定我是否正确理解了您的问题。但如果我这样做了,而你问工厂类是否是实例化派生类并获取指向它们的基类指针的唯一方法,那么答案是“否”。

您可以简单地执行 Base* b = new ExtendA;

如果我误解了您的问题,请无视我的回答,但请尝试澄清问题。

关于c++ - 使用工厂方法合并不同的类(c++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38489538/

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