Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在C++;为了在它们之间传输数据? 问题_C++_Class - Fatal编程技术网

C++ 如何在C++;为了在它们之间传输数据? 问题

C++ 如何在C++;为了在它们之间传输数据? 问题,c++,class,C++,Class,假设我有一个类,我想以某种方式连接它的对象: class Object { protected: int myValue; public: Object() : myValue(0) {} void SendValue() { //here is some sending mechanism //to send my value to *all* those objects //which are connected to me

假设我有一个类,我想以某种方式连接它的对象:

class Object
{
  protected:
    int myValue;

  public:
    Object() : myValue(0) {}

    void SendValue() { 
    //here is some sending mechanism
    //to send my value to *all* those objects 
    //which are connected to me
    }
};
我想在具有以下要求的对象之间创建连接。创建连接后:

  • 两端“知道”它们现在已经连接起来了

  • 应该可以使用此连接将一些数据从一个实例发送到另一个实例

  • 此连接不应多次存储

  • 最后一个要求是避免类似的情况:

    class Connection;
    
    class Object
    {
      protected:
        int myValue;
        //store all connections
        std::vector<Connection> connections;
    
      public:
        Object() : myValue(0) {}
        AddConnection( Connection c ) { connections.push_back(c); }
    };
    
    class Connection
    {
      protected:
        const Object* in;
        const Object* out;
    
      public:
        Connection() : in(0), out(0) {}
        void Init( const Object* i, const Object* o ) {
          in  = i;
          out = o; 
        }
    };
    
    类连接;
    类对象
    {
    受保护的:
    int-myValue;
    //存储所有连接
    向量连接;
    公众:
    对象():myValue(0){}
    添加连接(连接c){connections.push_back(c);}
    };
    类连接
    {
    受保护的:
    常量对象*in;
    常量对象*out;
    公众:
    连接():输入(0),输出(0){}
    void Init(常量对象*i,常量对象*o){
    in=i;
    out=o;
    }
    };
    
    在上面的示例中,两个对象都必须将它们之间的连接存储在它们的
    connections
    变量中。我知道这看起来很矛盾:两个对象都应该知道它们是连接的,但不应该存储这种连接。也许这不是不可能,我不知道

    问题 我不要要求为我写完整的代码。让我知道我可以用什么概念


    我知道上面对这个问题的描述不是很清楚,所以我将非常感谢类似问题、文章等的链接,或者一些关于如何编辑这个问题的建议,以使问题更清楚。

    解决这个问题有许多众所周知的模式。例如,“面向模式的软件体系结构,第2卷”中描述的接受器连接器模式

    像某种双向的观察者模式吗?我不认为我理解什么是观察者模式,但我怀疑在这种情况下,对象不知道它们是连接的。这听起来像是
    std::shared_ptr
    std::weak_ptr
    的用法。请注意,应使用
    std::shared_ptr
    来管理共享所有权。如果没有这样或那样的所有权关系,那么两者都不应该有
    std::shared_ptr
    ,但是对于他们来说,如果真正的所有者有
    std::shared_ptr
    ,他们应该有一个
    std::weak_ptr
    。你可以看看一些PubSub实现的想法。你到底是什么意思“传输数据”或“某些发送机制”?对象如何接收数据?它是否也有
    ReceiveValue()
    方法?