将指向模板类对象的指针正确传递给函数

Passing pointer to template class object to a function correctly

本文关键字:函数 指针 对象      更新时间:2023-10-16

我有一些类似的代码:

template<class T> class classA
{
public:
classA(uint32_t max) : numElements(max)
{
data = new T[numElements];
}
~classA() {delete[] data;}
uint32_t size()
{
return numElements;
}
T *data;
private:
const int numElements;
};
class classB
{
public:
classB(uint8_t* adress) : ptr(adress){}
void someFunction(classA<class T>* x)
{
uint8_t size = sizeof(T);
/*
do some stuff with the type size of T
*/
T* ptr1 = (T*)ptr; // create new pointer with same adress as ptr but different data type
/*
write some data from ptr1[i] to x->A[i]
*/
}
private:
uint8_t* ptr;
};

int main()
{
classB B(/*some memory adress*/);
classA<uint16_t> A(5)
B.someFunction(&A);
}

这个代码(这里非常简化(应该可以让类B的对象从特定的内存地址开始将数据写入类a对象的数据字段,无论类a中的数据数组是哪种类型。

正如所写的,编译器给出了一些错误:

  1. 将"sizeof"应用于不完整类型"T"无效

  2. 无效使用不完整的类型"class T"(由于someFunction中的指针填充(

  3. 无效参数"(因为调用了B.someFunction(&A((
  4. 对"classB::someFunction(classA<>*("的调用没有匹配的函数

我的问题是:

  1. 为了达到以下功能,我必须更改什么?应该允许给someFunction的指针具有任意数据类型,并且上面显示的操作应该在没有不完整类型错误的情况下工作。

  2. 在main中调用someFunction的正确synthax是什么?

我已经尝试过不同的东西,但没有任何帮助:-(

为了实现以下功能,我需要更改什么?应该允许给someFunction的指针具有任意数据类型,并且上面显示的操作应该在没有不完整类型错误的情况下工作。

因此someFunction本身需要是一个模板。因此,它需要适当的template标头:

template<class T>
void someFunction(classA<T>* x)
{
uint8_t size = sizeof(T);
/*
do some stuff with the type size of T
*/
T* ptr1 = (T*)ptr; // create new pointer with same adress as ptr but different data type
/*
write some data from ptr to x->A[i]
*/
}

除此之外,您的语法看起来是正确的。