我想编写类似于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