Передача унаследованных структур в опрос () - PullRequest
0 голосов
/ 03 октября 2018
class Socket{ //implementation
};

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

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

Могу ли я передать унаследованные структуры в poll ()?Если нет, то почему?Кажется, я получаю много ошибок в таком случае.

1 Ответ

0 голосов
/ 03 октября 2018

Вы не можете обрабатывать массив (или вектор) объектов полиморфно, и этот вопрос не относится к механизму poll.

Причина довольно проста - если функция ожидает указатель на Nобъекты, каждый из которых имеет размер Z, и вы передаете ему массив из N объектов, каждый из которых имеет размер Z1, функция будет очень запутана - она ​​будет ожидать, что второй объект начнется со смещения Z, а вместо этого он начнется ссмещение Z1.Конечно, это приведет к всевозможным проблемам.

Ситуация была бы другой, если бы функция ожидала массив указателей на объекты - это сработало бы.

...