2013-03-07 50 views
-3

我需要創建一個Buffer類,其構成受控緩衝區的變量類型是在istantiation時間決定的。因此,我需要一個long int字節的緩衝區類,長度爲30個元素,我將實例化類似於:如何初始化管理其實例化時傳遞的數據類型的緩衝區的類。

GeneralBuffer myLongBuffer(long int,30);或GeneralBuffer myLongBuffer(LONG,30);

雖然如果我需要unsigend浮動型:

GeneralBuffer myFloatingBuffer(unsigend浮子,30);或者GeneralBuffer myLongBuffer(UFLOATING,30);

有什麼建議嗎?

+0

只有在編譯時已知類型,谷歌「C++模板」 – 2013-03-07 11:35:09

+0

'std :: vector'和'std :: array'(C++ 11)都會做你想做的。 – 2013-03-07 11:41:46

回答

1

由於類型是編譯時構造,所以不能將它們作爲參數傳遞給函數。相反,你需要模板。模板允許根據傳遞給它的模板類型參數實例化類或函數的不同實現。所以,如果您有:

template <typename T> 
class GeneralBuffer 
{ 
    private: 
    T* internal_buffer; 
    public: 
    GeneralBuffer(size_t size); 
}; 

可以實例GeneralBufferint,並創建一個類型的對象,像這樣:

GeneralBuffer<int> my_int_buffer(30); 

然而,這只是看起來像的std::vector重新實現。

或者,如果緩衝區的大小也是一個編譯時間常數,你也可以把它作爲一個模板參數:

template <typename T, std::size_t N> 
class GeneralBuffer 
{ 
    private: 
    T internal_array[N]; 
    public: 
    GeneralBuffer(); 
}; 

,你會使用像這樣:

GeneralBuffer<int, 30> my_int_buffer; 

但是,這看起來像是std::array的重新實現。

+0

感謝您的建議。在你的第一個例子中,是否有必要在構造函數方法中更多地刪除一些內容,以便將正確的30個元素空間保留到internal_buffer數組/指針? – fede72bari 2013-03-07 11:53:59

+0

@ fede72bari是的,您需要分配緩衝區。目前,這個類只包含一個指向'T'的指針。 – 2013-03-07 11:55:15