gpt4 book ai didi

c++ - 一个类的多个接口(interface)

转载 作者:行者123 更新时间:2023-11-30 03:36:21 27 4
gpt4 key购买 nike

我正在尝试为 C++ 中的类提供多个接口(interface)的问题提出一个优雅的解决方案。假设我们有类 B、C 和 D。B 和 C 需要自定义/控制对类 A 的访问,而 D 可以直接访问。提供此类接口(interface)的解决方案需要可扩展。 future 的接口(interface)可能只针对一个特定的类。

目前我正在创建接口(interface)类(IA_1、IA_2),它们引用了类 A。B 和 C 将提供这些接口(interface)的实例,并且可以通过 IA_1 和 IA_2 以自定义/受控的方式分别访问 A。情况如下图所示。

enter image description here

这样做的好处是我在实现新接口(interface)时不需要接触 A 类。新接口(interface)可以通过继承利用旧接口(interface)。需要访问 A 的类只能通过它们的特定接口(interface)来访问。

C++ 中的实现如下所示:

class A{
public:
void foo();
};

class IA_1{
public:
void foo(const B& b);
private:
std::weak_ptr<A> m_A;
};

class IA_2{
public:
void foo();
private:
std::weak_ptr<A> m_A;
};

class B{
std::unique_ptr<IA_1> m_A;
};

class C{
std::unique_ptr<IA_1> m_A;
};

class D{
std::weak_ptr<A> m_A;
};

接口(interface)获取 A 的 weak_ptr,因为我不希望仅访问 A 的类参与其生命周期管理。

目前我正在为 B 或 C 的每个实例创建一个接口(interface)对象,尽管它们都在做同样的事情。我已经考虑过只创建一个接口(interface)对象,并为 B 和 C 的每个实例提供相应接口(interface)的引用(shared_ptr)。这样一来,每个界面我将只有一个对象。也许这已经是过早优化以减少应用程序内存占用的情况。

有没有办法进一步改进这个设计或采取完全不同的方法?

最佳答案

可能不是一个完整的答案,只是我的想法。

缺点:

  • 引入了额外的接口(interface)类
  • 额外的间接性,每个受支持的调用都有额外的维护
  • 构造:指向对象的接口(interface)需要额外的工厂
  • 弱指针:解决指针悬空的情况

优点:

  • 明确控制类的接口(interface)
  • 额外的生命周期安全性(可以检查,但也应该处理)
  • 需要对对象( friend ?)进行有限的更改

关于每个接口(interface) 1 个实例:占用空间会少一些,但您需要对访问该 1 个实例进行额外管理。

关于c++ - 一个类的多个接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40741314/

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