将继承的结构传递给poll()

时间:2018-10-03 15:51:27

标签: c++ inheritance system-calls polling

class Socket{ //implementation
};

struct PollSocket : pollfd  {
     Socket mSocket;
     // some methods
}

std::vector<PollSocket> mPolledSockets;
poll(mPolledSockets.data(), mPolledSockets.size(), 0);

我可以将继承的结构传递给poll()吗?如果没有,为什么?在这种情况下,似乎有很多错误。

1 个答案:

答案 0 :(得分:2)

您不能对对象的数组(或向量)进行多态处理,并且此问题并非专门针对poll机制。

原因很简单-如果函数需要一个指向N个对象的指针,每个对象的大小为Z,然后向其传递N个对象的数组,每个对象的大小为Z1,则函数会很困惑-会期望第二个对象从偏移量Z开始,而相反,它将从偏移量Z1开始。当然,这会导致各种各样的麻烦。

如果函数期望对象的 pointers 指针数组,情况将有所不同。