将“指向指针”的参数传递给模板函数

3
我有一个函数,它将内存分配给一个指针,如下所示:
   void initializeImageBuffer(unsigned char **image, int w, int h)
   {
        if (*image != NULL)
            delete[] *image;
        *image = new unsigned char[w * h];
   }

现在我想使用函数模板来泛化参数类型(无符号字符/整数/双精度浮点数)。以下是我的做法:

 template<typename T, int, int>
 void initializeImageBuffer(T **image, int w, int h)
   {
        if (*image != NULL)
            delete[] *image;
        *image = new T[w * h];
   }

但是使用该函数时出现了错误,例如:
    unsigned char* image;
    initializeImageBuffer(&image, 200, 200);

这些参数类型没有重载函数的实例。 参数类型为(unsigned char **,int,int)。

2个回答

7
template<typename T, int, int>

在这里,您声明模板具有三个参数,类型 T 和两个未命名的 int。由于无法推断出调用站点上 int 的值,因此您需要显式提供它们,以及 T,因为您只能从左到右提供模板参数:

initializeImageBuffer<unsigned char, 42, 42>(&image, 200, 200);

然而,你最可能想要做的就是放弃这些“int”,因为它们在这里完全没有用处。
template<typename T>
void initializeImageBuffer(T **image, int w, int h)

5
你可能会把模板参数和函数参数混淆。在这里,模板参数列表中的“int, int”是不必要的,并且无法从函数调用中推断出来,这就是编译器抱怨的原因。只需将它们移除即可:
template<typename T>
void initializeImageBuffer(T **image, int w, int h)
{
    if (*image != NULL)
        delete[] *image;
    *image = new T[w * h];
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接