gpt4 book ai didi

C++模板方法及获取结果——设计

转载 作者:行者123 更新时间:2023-11-30 02:53:32 25 4
gpt4 key购买 nike

我有这样一个接口(interface)类:

class MyInterface
{
public:
virtual void DoStuff() = 0;
virtual Result GetResult() = 0;
};

和实现模板模式的简单抽象方法:

class Abstract: public MyInterface
{
public:
void DoStuff()
{
DoAFoo();
BakeAPie();
PrepareResult();
}

virtual DoAFoo() = 0;
virtual BakeAPie() = 0;
virtual PrepareResult() = 0;
};

我的问题来了。方法 GetResult() 应该由 Abstract 的每个具体实现来实现吗?会有很多这样的子类。

还是应该在Abstract类中处理?像这样:

class Abstract: public MyInterface
{
public:
....
GetResult()
{
return m_result;
}

private:
Result m_result;
}

但是我如何确保抽象子类将在 PrepareResult() 中填充 m_result?

最佳答案

您应该问自己这个问题:“将结果存储在成员中并从 GetResult() 返回该成员是 GetResult() 的唯一合理实现吗?一些通常可能的替代方案可能是:

  • 每次按需计算结果GetResult()被称为。

  • 在某处缓存多个结果并从 GetResult() 返回正确的结果视情况而定。

  • 还有什么……?

在不知道您的确切问题的情况下,我们无法回答这个问题,只有您可以。

如果您得出的结论是,将单个结果存储在一个成员中并返回它是唯一明智的方法,您可以继续实现 GetResult()Abstract ,因为其他人无论如何都会做同样的事情。并保证 PrepareResult() 的正确行为,您可以按如下方式更改界面:

class Abstract: public MyInterface
{
public:
void DoStuff()
{
DoAFoo();
BakeAPie();
m_result = PrepareResult();
}

virtual void DoAFoo() = 0;
virtual void BakeAPie() = 0;
virtual Result PrepareResult() = 0;

virtual Result GetResult()
{ return m_result; }

private:
Result m_result;
};

请注意,我建议您标记 GetResult()作为constMyInterface (在 Abstract 中也是如此)。这是有意义的 const功能。

关于C++模板方法及获取结果——设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17918213/

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