繁体   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