0

我正在开展一个项目,将一些代码从名为 MODSIM 的模拟语言转换为 C++,并且遇到了一些我难以理解的东西。

代码示例如下:

PlaneQueueObj = OBJECT(QueueObj[ANYOBJ:PlaneObj])

这意味着我们声明了一个class PlaneQueueObj继承自的QueueObj,它只允许从的对象class PlaneObj或派生的类PlaneObj进入队列。(在这种语言中,类被称为对象......)

我想知道如何在C++.
这可能真的很明显,我只是让自己感到困惑,但我是新来的,所以放轻松。

4

2 回答 2

3

我认为您正在寻找的只是,std::queue<std::unqiue_ptr<PlaneObj>>.

IE

std::queue<std::unique_ptr<PlaneObj>> queue;

queue.push(new PlaneObjType1());
queue.push(new PlaneObjType2());
queue.push(new PlaneObjType3());
于 2013-07-09T11:23:13.087 回答
0

这样的事情会做吗?

我想你的队列正在做一些特别的事情,所以你需要自己实现一个。

免责声明:我从来没有写过模板,所以我可能完全错了;)

#include <vector>
#include <iostream>

template<typename T>
class QueueObj 
{
private:
    std::vector<T> queue;
public:
    void Enqueue(const T &t)
    {
        queue.push_back(t);
    }

    T Dequeue()
    {
        T t = queue.back();
        queue.pop_back();

        return t;
    }
};

class PlaneObj
{
public:
    virtual void Print()
    {
        std::cout<<"PlaneObj"<<std::endl;
    }
};

class PlaneObjDerived : public PlaneObj 
{
public:
    virtual void Print()
    {
        std::cout<<"PlaneObjDerived"<<std::endl;
    }
};

class PlaneQueueObj : public QueueObj<PlaneObj*> {};

int main()
{
    PlaneQueueObj queue;
    PlaneObjDerived *po1 = new PlaneObjDerived;
    PlaneObjDerived *po2 = new PlaneObjDerived;

    queue.Enqueue(po1);
    queue.Enqueue(po2);
    // queue.Enqueue(10); // ERROR: error C2664: 'QueueObj<T>::Enqueue' : cannot convert parameter 1 from 'int' to 'const PlaneObj &'

    po1 = static_cast<PlaneObjDerived *>(queue.Dequeue());
    po2 = static_cast<PlaneObjDerived *>(queue.Dequeue());
    po1->Print();
    po2->Print();

    return 0;
}
于 2013-07-09T11:32:19.733 回答