派生实例的继承和智能指针 class
inheritance and smart pointers to instance of derived class
目前我正在制作简单的聊天程序,但在构建 类 时遇到了问题。
这是我做的两个类
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<SocketPtr>
访问 TCPSocket
的成员函数时,我无法访问它们,因为来自向量的实例是 shared_ptr<Socket>
。
现在,我只是在使用 static_pointer_cast<TCPSocket>(exampleSocket)
将它们转换为 shared_ptr<TCPSocket>
之后使用它们,但我认为我不应该像那样构建 类。
如能提供更好的 类 套接字编程帮助,我们将不胜感激。
抱歉我的英语不好。
当我这样做时,我通常会得到两个 类,一个接受器和一个连接。接受器等待连接请求并将其传递给创建新连接线程并开始侦听的套接字消费者。也许像 this.
目前我正在制作简单的聊天程序,但在构建 类 时遇到了问题。
这是我做的两个类
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<SocketPtr>
访问 TCPSocket
的成员函数时,我无法访问它们,因为来自向量的实例是 shared_ptr<Socket>
。
现在,我只是在使用 static_pointer_cast<TCPSocket>(exampleSocket)
将它们转换为 shared_ptr<TCPSocket>
之后使用它们,但我认为我不应该像那样构建 类。
如能提供更好的 类 套接字编程帮助,我们将不胜感激。
抱歉我的英语不好。
当我这样做时,我通常会得到两个 类,一个接受器和一个连接。接受器等待连接请求并将其传递给创建新连接线程并开始侦听的套接字消费者。也许像 this.