Есть ли способ перебрать неполные структуры - PullRequest
0 голосов
/ 18 июня 2019

У меня есть такой код:

#include <vector>

struct pollfd; // incomplete struct, since i did not included <poll>

struct Status{
   // abstract representation of pollfd, epoll_event, kevent
   int fd;
   int status; // my own status representation
};

class iterator{
public:
    hidden_pointer_iterator(const pollfd *pos) : pos(pos){}

    bool operator !=(iterator const &other) const{
        return ! ( *this == other);
    }

    bool operator ==(iterator const &other) const;
    iterator &operator ++();
    Status operator *() const;

private:
    const pollfd *pos;
};

class PollSelector{
public:
    // ...
    iterator begin() const; // pull pointer to fds_.data()
    iterator end() const;   // pull pointer to fds_.data() + fds_.size()

private:
    std::vector<pollfd> fds_;
};

Я смог запустить его, реализовав все конкретные операции в файле CPP.

Мой вопрос - есть ли еще "Стандартный «способ сделать этот итератор?»

Обновление

Мой код компилируется и работает.

Мне очень жаль, если в std есть что-то, что может делать все это автоматически, без большого количества кодирования.

1 Ответ

0 голосов
/ 18 июня 2019

Немного не по теме, ИМО, этот код абстрагирует не то, что нужно.

У вас должно быть несколько реализаций интерфейса вашего механизма демультиплексора, один из которых использует epoll, другой для kevent и т. Д. Интерфейс механизма демультиплексора позволяет регистрировать обратные вызовы для событий дескриптора файла, таймеров, сигналы, перекрестная резьба и т.д ..

В Linux может быть мало смысла использовать что-либо еще, кроме epoll.

...