簡體   English   中英

創建一個MultiClass隊列C ++

[英]Create a MultiClass Queue C++

是否可以為具有相同接口的不同類型的對象創建隊列?

例如,我有一個名為SensorItem的接口,以及4種類,SensorItemA,SensorItemB,SensorItemC,SensorItemD`

queue <SensorItem> cola;
void encolar(SensorItem* dato)
{
    cola.push (*dato);
}
SensorItem* sacar()
{
    SensorItem* d=cola.front();
    cola.pop();
    return d;

}

那就是我的班級Queue(Cola),在這里我嘗試使用它

void main()
{
    Cola c=new Cola();
    TemperatureItem t=new TemperatureItem(3.25);
    c.encolar(t);
    ImuItem i=new ImuItem(3,4,8);
}   

我的語法有問題嗎? 還是只是不可能做到這一點?

C ++中的多態僅適用於引用和指針。 C ++中的對象是對象,而不是引用。 如果創建SensorItem ,它將始終是SensorItem ,而不是TemperatureItemImuItem 如果您有std::queue<SensorItem> ,則其元素將始終為SensorItem ,而不是TemperatureItemImuItems

如果要使從SensorItem派生的對象隊列,則需要使用指向SensorItem的指針隊列:

#include <iostream>
#include <queue>
#include <memory>

struct SensorItem
{
    virtual void doAThing() = 0;
    virtual ~SensorItem() {}
};

struct TemperatureItem : SensorItem
{
    void doAThing() { std::cout << "TemperatureItem\n"; }
};

struct ImuItem : SensorItem
{
    void doAThing() { std::cout << "ImuItem\n"; }
};

class Cola
{
private:
    std::queue<std::unique_ptr<SensorItem>> cola;

public:
    void encolar(std::unique_ptr<SensorItem> dato)
    {
        cola.push(std::move(dato));
    }
    std::unique_ptr<SensorItem> sacar()
    {
        std::unique_ptr<SensorItem> d = std::move(cola.front());
        cola.pop();
        return d;
    }
};

int main()
{
    Cola c;
    c.encolar(std::make_unique<TemperatureItem>());
    c.encolar(std::make_unique<ImuItem>());
    std::unique_ptr<SensorItem> item = c.sacar();
    item->doAThing();
    item = c.sacar();
    item->doAThing();
}

住在科利魯

在這里,我使用了std::unique_ptr來避免必須進行手動內存管理。 您可以使用原始的SensorItem* ,但是我建議不SensorItem*

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM