我想編寫類似於C++ 11中的std::array
的類。要做到這一點,我 宣佈這個類裏面的char
類型的表,後來我想在這個表上調用 placement new
之後,我想使用表,如果它是T
類型的常規表,並且麻煩來了。C++將原始表格轉換爲其他表格類型
一般變量,如:
char tab[size];
是char(&)[size]
的類型,如果是這樣的,所以我想用reinterpret_cast
在此表上丟給類型的表中,我實際上是使用,所以更多的還是少,我想我的代碼看起來像這樣:
char tab[sizeof(T)*size];
T tabT[size] = reinterpret_cast<T(&)[size]>(tab);
// more code using tabT
在這種情況下標籤
然而,被視爲char*
類型。究其原因,爲什麼我認爲它可以工作是寫下面的模板功能的能力
template <typename T, size_t size>
function(T(&table)[size]){
//do stuff connected with table of type T and size size.
}
我知道我能做到這一點沒有這個奇特的魔法在這裏,但我只是想知道,爲什麼這是行不通的。
所以我的問題是:有沒有辦法做我想做的事情,有沒有更優雅的方式做上述工作?
PS:我沒有聲明T類型的原始表,如:T tab[size]
,因爲我無法創建元素,沒有構造函數,沒有 參數。
也許如果您使用標準術語「數組」而不是「表」,人們會更容易理解您。 –
「我無法創建元素,沒有參數的地方沒有構造函數。」 'std「:: array'處理這個就好了,不需要使用'char'緩衝區。 –
是的,但是我不能使用C++ 11,我不知道std :: array是如何實現的 – DawidPi