gpt4 book ai didi

c++ - 通过 C++ 类接口(interface)处理序列

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:00:04 24 4
gpt4 key购买 nike

假设我正在为类 A 编写一个接口(interface),它保留类型 B 的对象列表,并且我希望能够通过类 A 的接口(interface)操作该列表。我可以将 add_B、remove_B 等方法放在 A 的接口(interface)中,但这样会造成大量代码重复(这种情况在我的程序中的许多类中都会出现),所以我宁愿返回对列表本身的引用。然而,这会破坏封装。
有没有标准的方法来处理这种情况?

最佳答案

下面的代码基于代理设计模式。它通过将接口(interface)委托(delegate)给“代理”对象来保留封装并避免“A”中的庞大接口(interface)。

另请注意 typedef 如何允许自由地将“list”更改为“vector”或其他任何内容。

struct B{};

struct A{
struct containerproxy{
void Add(B *pb);
void Remove(B *pb);
};
friend struct containerproxy;
containerproxy &GetProxy(){return mlprx;}
typedef containerproxy intf;
~A(){
// Code to delete list elements and cleanup the list
}
private:
containerproxy mlprx;
list<B*> mlp;
};

void A::containerproxy::Add(B *pb){ /*code to add pb to mlp*/}
void A::containerproxy::Remove(B *pb){/*code to remove pb from mlp*/}

int main(){
A a;
A::intf &r = a.GetProxy();

B *p = new B;
r.Add(p);
}

关于c++ - 通过 C++ 类接口(interface)处理序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3690136/

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