【问题标题】:inheritance and smart pointers to instance of derived class继承和指向派生类实例的智能指针
【发布时间】:2018-08-10 17:11:06
【问题描述】:

目前我正在制作简单的聊天程序,但在构建课程时遇到了问题。

这是我制作的两个类

Socket.h

class Socket;
using SocketPtr = shared_ptr<Socket>;

class Socket
{
private:
    SOCKET socket;
public:
    virtual int bind(const SocketAddress& toAddress) = 0;

    void setSocket(SOCKET sock);
    SOCKET getSocket();
};

TCPSocket.h

class TCPSocket;
using TCPSocketPtr = shared_ptr<TCPSocket>;

class TCPSocket : public Socket
{
private:
    friend class SocketUtil;
    TCPSocket(SOCKET sock);

public:
    ~TCPSocket();
    int bind(const SocketAddress& toAddress) override;
    int listen(int backLog = SOMAXCONN);
    int connect(const SocketAddress& toAddress);
    TCPSocketPtr accept(SocketAddress& fromAddress);
    int32_t send(const void* data, size_t length);
    int32_t receive(void* data, size_t length);
};

我正在尝试使用带有共享指针的 tcp 套接字实例,但是当我尝试从 vector&lt;SocketPtr&gt; 访问 TCPSocket 的成员函数时,我无法访问它们,因为来自向量的实例类型是 @ 987654325@。

目前,我只是在将它们转换为 shared_ptr&lt;TCPSocket&gt;static_pointer_cast&lt;TCPSocket&gt;(exampleSocket) 后使用它们,但我认为我不应该构建这样的类。

任何有关构建更好的套接字编程类的帮助将不胜感激。

对不起,我的英语不好。

【问题讨论】:

    标签: class sockets inheritance smart-pointers


    【解决方案1】:

    当我这样做时,我通常会得到两个类,一个接受器和一个连接。接受器等待连接请求并将其传递给创建新连接线程并开始侦听的套接字使用者。可能类似于this

    【讨论】:

      猜你喜欢
      • 2017-03-16
      • 2016-07-03
      • 2011-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-20
      • 2016-09-02
      相关资源
      最近更新 更多