将继承的结构传递给 poll()
Passing inherited structs to poll()
class Socket{ //implementation
};
struct PollSocket : pollfd {
Socket mSocket;
// some methods
}
std::vector<PollSocket> mPolledSockets;
poll(mPolledSockets.data(), mPolledSockets.size(), 0);
我可以将继承的结构传递给 poll() 吗?如果不是,为什么?在这种情况下,我似乎遇到了很多错误。
您不能以多态方式处理对象数组(或向量),并且此问题并非特定于 poll
机制。
原因很简单 - 如果函数需要一个指向 N 个对象的指针,每个对象的大小为 Z,而你向它传递一个包含 N 个对象的数组,每个对象的大小为 Z1,函数将非常混乱- 它会期望第二个对象从偏移量 Z 开始,而它会从偏移量 Z1 开始。当然,这会导致各种麻烦。
情况会有所不同,如果函数需要指针数组到对象 - 这会起作用。
class Socket{ //implementation
};
struct PollSocket : pollfd {
Socket mSocket;
// some methods
}
std::vector<PollSocket> mPolledSockets;
poll(mPolledSockets.data(), mPolledSockets.size(), 0);
我可以将继承的结构传递给 poll() 吗?如果不是,为什么?在这种情况下,我似乎遇到了很多错误。
您不能以多态方式处理对象数组(或向量),并且此问题并非特定于 poll
机制。
原因很简单 - 如果函数需要一个指向 N 个对象的指针,每个对象的大小为 Z,而你向它传递一个包含 N 个对象的数组,每个对象的大小为 Z1,函数将非常混乱- 它会期望第二个对象从偏移量 Z 开始,而它会从偏移量 Z1 开始。当然,这会导致各种麻烦。
情况会有所不同,如果函数需要指针数组到对象 - 这会起作用。