Двойной шаблонный объект - PullRequest
1 голос
/ 10 октября 2019

Я пытаюсь создать очередь из шаблонных стеков. Но я не знаю, как добавлять данные или извлекать данные из очереди.

Я инициирую это так:

Queue<Stack<Function>> processQueue;

с классом "Function", который я создал.

Например, я пытаюсь выяснить, как добавить такие вещи, как функция, в начало первого стека в очереди.

У меня есть функция постановки в очередь в классе Queue, иpush-функция в классе Stack.

Я пытался делать это по-разному, но не могу понять правильный синтаксис или даже если это допустимо. Вот пример:

Function newFunc(funcName, funcExecept);
processQueue.enqueue(Stack<Function>(push(newFunc)));

Или, если я хочу получить данные:

processQueue.peekFront().returnTop().getName();

Ответы [ 2 ]

0 голосов
/ 10 октября 2019

Сложно ответить с точным синтаксисом, когда мы не знаем интерфейс ваших классов Queue и Stack, но вот как вы могли бы сделать это со стандартными std::queue и std::stack:

std::queue<std::stack<Function> processQueue;

// Add function to top of first stack of queue:
Function newFunc(funcName, funcExecept);
if (processQueue.empty())
  processQueue.push({}); // push an empty stack into the queue
processQueue.front().push(newFunc);

// Retrieve data:
processQueue.front().top().getName();

Имена функций, конечно, будут другими в вашем случае (в зависимости от API вашего класса), но принцип должен быть таким же.

Обратите внимание, что если у вас нет Сильная причина использовать пользовательские классы, вы должны вместо этого использовать стандартные контейнеры;они гораздо более проверены и оптимизированы, чем пользовательские реализации.

0 голосов
/ 10 октября 2019

Ваш синтаксис недопустим, так как push должен быть на экземпляре объекта. Сначала создайте стек, затем нажмите функцию, затем добавьте в очередь.

Function newFunc(funcName, funcExecept);
Stack<Function> stack;
stack.push( newFunc );
processQueue.enqueue(stack);

или, сначала поместите стек очереди, а затем нажмите на нее

processQueue.enqueue(Stack<Function>());
processQueue.peekFront().push( Function( funcName, funcExecept ) );

Во второмПри использовании peekFront предполагается, что в очереди есть только один стек - только что добавленный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...