Как я могу получить доступ к функциям-членам классов STL внутри производных классов, которых нет в базовом классе? (подробное объяснение в теле) - PullRequest
0 голосов
/ 16 октября 2019

Прямо сейчас у меня есть базовый класс, класс Base {}, с двумя производными классами, BFS {} и DFS {}. У BFS есть очередь, а у DFS - стек, поэтому у них обоих есть член, называемый «узлами», но типом являются их соответствующие std :: queue и std :: stack. Моя функция поиска принимает указатель на базовый класс в качестве своего параметра, чтобы она могла принимать оба производных класса, и выполняет поиск, выдвигая и извлекая из классов-членов внутри производных классов (согласно обычным алгоритмам DFS BFS). Проблема заключается в том, что, поскольку я передавал свой базовый класс в качестве параметра, всякий раз, когда я пытаюсь вызвать push или pop для стека / очереди членов, называемых «узлами», из производных классов, он всегда говорит, что push / pop невозможно сделать, потому чтовнутри базового класса нет члена, называемого "узлами". Как я должен сделать эту работу? Кроме того, эта настройка является требованием задания, которое я выполняю, и я просто не могу понять, как это должно работать, любая помощь приветствуется. Спасибо!

class Base {
public:
    virtual void push(uint64_t roomID, float intensity, int distance) = 0;
    virtual Node pop(void) = 0;
    virtual int size(void) = 0;
};

class Breadth : public Base {
public:
    std::queue<std::pair<uint64_t, int>> U;
    void push(uint64_t roomID, float intensity, int distance) { std::pair<uint64_t, int> p(roomID, distance); U.push(p); }
    Node pop() { Node rr; rr.ID = U.front().first; rr.distance = U.front().second;  U.pop(); return rr; }
    int size() { return U.size(); }
};

class Depth : public Base {
public:
    std::stack<std::pair<uint64_t, int>> U;
    void push(uint64_t roomID, float intensity, int distance) { std::pair<uint64_t, int> p(roomID, distance); U.push(p); }
    UnexploredRoom pop() { U.pop(); }
    int size() { U.size(); }
};

void robotSearch::searchLoop(Base* search, Discovered* D, uint64_t roomID)
{
    Node room;
    room.ID = roomID;
    room.distance = 0;
    search->U.push(room); //problem here, compiler wont let me push U
    ...
}
...