gpt4 book ai didi

C++ 将原始表转换为另一种表类型

转载 作者:行者123 更新时间:2023-11-30 03:45:39 26 4
gpt4 key购买 nike

我想编写类似于 C++11 中的 std::array 的类。为此,我在此类中声明 char 类型的表,稍后我想调用placement new 在此表上之后,我想像使用 T 类型的常规表一样使用该表,问题就来了。

一般变量如:

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],因为我无法创建元素,如果没有参数。

最佳答案

类型转换并不能真正帮助你:

char tab[sizeof(T)*size];
T tabT[size] = reinterpret_cast<T(&)[size]>(tab);

由于数组不可复制,所以此代码在实例化时无法编译。至少你需要使用

T (&tabT)[size] = reinterpret_cast<T(&)[Size]>(tab);

但是,我建议不要将未初始化的元素存储为 char 数组。只需将 union 与嵌套数组一起使用:

template <typename T, int Size>
class array
{
union Data {
Data() {}
T values[Size];
} data;
public:
array() { /* initialize the elements appropriately */ }
~array() { /* destroy the initialized elements */ }
// ...
};

关于C++ 将原始表转换为另一种表类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34622826/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com