无法推断模板参数"循环类型"

couldn't deduce template parameter ‘looptype’

本文关键字:循环 循环类 类型 参数      更新时间:2023-10-16
#include<cstdlib>
#include<iostream>
#include<math.h>
#include<string>
using namespace std;
class getAverage{
public:
template<class add>
add computeAverage(add input[], int nosOfElem){
add sum = add();//calling default constructor to initialise it.
for(int index=0;index<=nosOfElem;++index){
    sum += input[index];
}
return double(sum)/nosOfElem;
}
template<class looptype>
looptype* returnArray(int sizeOfArray){
      looptype* inputArray= (int*)malloc(sizeof(int)*sizeOfArray);
    for(int index=0;index<=sizeOfArray;++index){
        inputArray[index]=index;//=rand() % sizeOfArray;
        }
return inputArray;
}
};
int main(){
int sizeOfArray=2;
int inputArray;
getAverage gA;
int* x= gA.returnArray(sizeOfArray);
for(int index=0;index<=2;++index){
cout<<x[index];
}
cout<<endl;
cout<<gA.computeAverage(x,sizeOfArray); 
free(x);
return 0;
}

我想创建一个模板函数,通过它我可以创建不同类型的动态数组(Int,long,string ..等(。我尝试这样做,并意识到"looptype"永远不会获得类型值。有人可以建议一种方法来做到这一点。

谢谢

template<class looptype>
looptype* returnArray(int sizeOfArray){
    looptype* inputArray= (int*)malloc(sizeof(int)*sizeOfArray);
    for(int index=0;index<=sizeOfArray;++index){
        inputArray[index]=index;//=rand() % sizeOfArray;
    }
    return inputArray;
}
模板参数

只能从函数模板参数中推导出来。在这里,您的函数模板采用的唯一参数是 sizeOfArray 这是一个int。编译器如何知道typename looptype是什么?由于无法推断,因此必须显式指定它。

int* x= gA.returnArray<int>(sizeOfArray);

而不是:

int* x= gA.returnArray(sizeOfArray);

顺便说一句,当我知道模板参数只能

是您的这行代码出售的int时,looptype模板参数有什么意义:

 ...
looptype* inputArray= (int*)malloc(sizeof(int)*sizeOfArray);
...

你对malloc的使用是可怕的。对于几乎相同的性能,您正在使简单的任务变得复杂。更喜欢std::vector<int>或更坏的情况std::unique_ptr<int[]>