簡體   English   中英

循環隊列中的c ++模板專業化

[英]c++ template specialization in circular queue

嗨,我正在嘗試開發循環隊列,但是此實現對於基本類型(如int float等)都很好用,

template<typename R, size_t aSize=200>
class CircularQueue{
public:

    explicit CircularQueue(const R & aElement);


    ~CircularQueue()
    {

    }

    bool push(const R & aElement);

    bool pop(R & aElement);

    bool isEmpty() const    ;

    bool isFull() const     ;
private:
    CircularQueue(){}
    CircularQueue(const CircularQueue &);
    const CircularQueue & operator=(const CircularQueue &);
    int incrementar(int  ) const;
        static const size_t capacity=aSize+1;
        R array[capacity];
        volatile int tail;
        volatile int head;

};

但是,當我嘗試將其專門化為自定義類型時,編譯器告訴我必須調用especif構造函數:Especif類

    class PutMessage: public  IMetodo, Sujeto<PutMessage>
    {
    public:
       explicit PutMessage(Servant * aServant = 0,Mensaje * aMensaje=0, Observer<PutMessage> * aFuture=0);
        virtual ~PutMessage();
    bool guard() const;
    int getResult() const ;
    void call();

    Mensaje * getMensaje() const;

    Servant * getServant() const;

    bool hasFuture() const;
    private:
    PutMessage();
    Servant * mServant;
    Mensaje * mMensaje;
    int mResult;
    bool mHasFuture;
};
}

循環隊列調用:

CircularQueue<PutMessage,32> aCircular(*aMessageQueue);

我是否需要將類重新實現為半專業化類?

此問題是由以下數據成員引起的:

R array[capacity];

一個數組已經包含了所有元素,因此每個數組都需要調用R的構造函數。 為什么不使用std::vector代替呢?

停止以代碼中顯示的方式使用explicit關鍵字。 在您的PutMessage類中,創建一個void構造函數,它應該可以正常工作:

PutMessage() : PutMessage(0,0,0) {}

對於記錄,將無效指針分配給nullptr而不是0。

編輯:雖然,為了更好地實現CircularQueue ,您應該真正使用operator new()來分配隊列空間和new位置以構造元素。 但是,可能會有一些設計要求指定使用堆棧代替,這就是為什么這不是我的原始答案的一部分。

暫無
暫無

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

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