如何使用 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
...