gpt4 book ai didi

C++ 模板访问不同元素大小的数组?

转载 作者:太空宇宙 更新时间:2023-11-04 11:53:09 24 4
gpt4 key购买 nike

如何使用 C++ 模板来完成以下操作,或者有更好的方法吗?

我的 pgm 包含许多大而简单的表。为了节省空间,每个表可以是 char、short、long 或 long long(即,在我的编译器 VS2010 中具有 8、16、32 或 64 位的条目),具体取决于表内容(表在开始时构建一次PGM)。我有对这些表进行操作的函数,我想编写一个函数来处理所有类型。

表是用new分配的。用于说明的简化版本:

struct S1 {char x;}
struct S2 {short x;};
struct S4 {long x;}
struct S8 {long long x;};
struct V {int n; void *v}; // n=1,2,4 or 8, and v points to an array of Sn

V.v=new Sn[arrayLength]; // Sn is one of S1, S2, S4 or S8

当我想使用 v[i] 访问数组元素时,问题就来了,因为数组元素的大小在编译时是未知的。似乎模板应该允许这样做,但我没有使用它们的经验。

为了详细说明,结合 Crazy Eddie 的建议,我的代码现在看起来像

在 VA.h 中:

class VA
{
struct S1 {char x;}
struct S2 {short x;};
struct S4 {long x;}
struct S8 {long long x;};
template < typename T>
struct V {int n; T *v}; // n=1,2,4 or 8, and v points to an array of Sn

V vTable[1000]; // a fixed array size

void Func1(int k, int n, int size);
};

在 VA.cpp 中:

void Func1(int k, int n, int size)
{
V<T> *pV=&vTable[k]; // Question 1: How do I get from n to the appropriate type T?
pV->n=n;
pV->v=new SOMETHING[size]; // Question 2: What should SOMETHING be here?
// I am allocating an array of Sn
...

最佳答案

不,模板不会帮助解决您使用 void* 创建的问题。类型信息消失了。编译器只知道 void* 并且对其背后组件的大小一无所知。

另一方面,如果您一开始就使用模板,您就不会遇到这个问题:

template < typename T >
struct V { int n; T * v; };

关于C++ 模板访问不同元素大小的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17264062/

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