Это выглядит очень запутанным.Если вы хотите инкапсулировать функциональность опроса в объекте, не инкапсулируйте int, инкапсулируйте опрос.Примерно так:
class poller_callback {
public:
void handle_pollin(int fd) = 0;
};
class poller {
public:
poller(const vector<int>& fds);
void do_poll(const poller_callback& c)
{
// poll(&pfd, ...);
if(fd[i].revents & POLLIN) {
c.handle_pollin(fd[i].fd);
}
}
};
int main(void)
{
my_poller_callback my_handler;
// get fds
poller my_poller(fds);
do_poll(my_handler);
// ...
return 0;
}
Вот как я это сделаю.Имейте класс, который инкапсулирует poll()
, который параметризован на том, что он должен делать на событиях.poller_callback
- это интерфейс для объектов, которые обрабатывают события.Затем вы можете написать my_poller_callback
, который в handle_pollin
создает поток.