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

标签 c++ list interface sequence

假设我正在为类 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/

相关文章:

java - 在哪里可以找到 org.omg.CosTransactions 包

go - Go语言上的接口(interface)函数调用

C++ 堆栈实现硬件错误

c++ - 初始化 vector 的问题

python - 在Python中有效地对相邻列表项进行分组

Java HashSet 重复项比较

c++ - 将二维 vector 初始化为类变量 C++

c++ - 将类级二维数组变量设置为传入值 - C++

python - 使用 pandas 和 python 查找数据集中列的平均值

python - 将简单的 C++ 函数与 Python 接口(interface)的最快方法