最佳实践:A组成B,衍生A组成衍生B

Best practice: A compose B, DerivedA compose DerivedB

本文关键字:衍生 组成 最佳      更新时间:2023-10-16
  • 结构体B保存数据
  • 结构体DerivedB:BB添加了一些特定的数据
  • 类CCD_ 5保存对类型为CCD_
  • 类CCD_ 7保存对类型为CCD_

这本身就是一个糟糕的设计吗?

如果没有,实现这一目标的最佳方式是什么

class A
{
public:
A() :m_b(std::make_unique<B>(B())) {}
B& getB() { return *m_b; }
protected:
A(std::unique_ptr<B> b):m_b(std::move(b)) {}
private:
std::unique_ptr<B> m_b;
};
class DerivedA : public A
{
public:
DerivedA() :A(std::make_unique<B>(DerivedB())) {}
DerivedB& getDerivedB() { return static_cast<DerivedB&>(getB()); }
};

这种使用铸件的解决方案是最好的吗?

它本质上是一个糟糕的设计吗?

是的,降频有时被认为是C++中的一种设计气味。它通常是一个标志,表明你的设计正在打破利斯科夫替代原则。相反,考虑对BDerivedB使用多态性来实现所需的行为。

也许可以使用模板?

我在这里举了一个例子:http://melpon.org/wandbox/permlink/oMEzjpnsdOmgKTRs

但这是更好的方式吗?