我想在C++中在单个队列中推送多个结构

  • 本文关键字:结构 单个 C++ 队列 c++
  • 更新时间 :
  • 英文 :


我有两种类型的事件,它们具有相关值,例如:

struct EventRequest
{
char EventType;
int RetryCount;
} ER;
struct EventStatus
{
char EventType;
char StatusType;
short RetryCount;
} ES;

我想把上面的结构推到一个单独的队列/堆栈上,比如:

queue<typedef>q;
q.push(ER);
q.push(ES);
q.push(ER):
.
.
.

我该怎么做?

一个解决方案是多态性:两个结构都继承自一个公共基类。然而,这意味着";is-a";这种关系可能不存在,并且会使您的代码变得尴尬和难以理解。考虑到这一点,另一个解决方案(由于C++17(将是std::variant
#include <queue>
#include <variant>
struct EventRequest {
char EventType;
int RetryCount;
} ER;
struct EventStatus {
char EventType;
char StatusType;
short RetryCount;
} ES;
int main() {
std::queue<std::variant<EventRequest, EventStatus>> q;
q.push(ER);
q.push(ES);
return 0;
}

这个问题有几种解决方案:

  1. 使所有结构从同一个基本接口继承并使用智能指针。

  2. 使用unions(旧式(

  3. 对于这个例子,我将展示如何使用std::variant

#include <variant>
#include <queue>
struct EventRequest
{
char EventType;
int RetryCount;
};
struct EventStatus
{
char EventType;
char StatusType;
short RetryCount;
};
using AnyEvent = std::variant<EventRequest, EventStatus>;
int main()
{
std::queue<AnyEvent> event;

event.push(EventRequest());
event.push(EventStatus());
return 0;
}

在此处运行此代码:https://onlinegdb.com/D17aVXA1K

最新更新