在我的程序中,我决定用一个名为 Socket 的类来包装“套接字接口”(实际上只是我正在使用的部分)。我正在使用两个不同的“域”:AF_PACKET 和 AF_INET。因为这些域具有不同的地址结构,所以我决定也包装它们的地址。
我做了一个像下面这样的小班:
class SockAddress
{
public:
SockAddress();
virtual sockaddr* getAddress();
virtual socklen_t getAddrLen();
private:
sockaddr address_;
};
基于这个类,我创建了另一个类,而不是返回一个sockaddr*
返回的 sockaddr_ll*`
virtual sockaddr_ll* getAddress();
...
sockaddr_ll address_;
在 C 中,它们都是指针。我只知道在任何地方sockaddr*
都需要 a ,如果我通过 a sockaddr_ll*
(并传递相应的socklen_t
大小值)就不会有问题。
但是在 C++ 中,尝试编译时,我得到一个invalid covariant return type
错误。我已经在此处、此处、此处阅读了有关此错误的信息,并且我了解它的含义。无论如何,我找不到“解决方法”这个问题的方法。
我的问题是:由于我想返回指针(并且指针将具有相同的大小),有没有办法强制编译器接受sockaddr_ll*
as a sockaddr*
?而且,如果有办法,我该怎么做?
(如果没有办法,解决这个问题的“正确方法”可能是什么?)