#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 ..etc。)。我试过这样做,并意识到&#34; looptype&#34;永远不会得到类型值。有人可以建议一种方法来做到这一点。
由于
答案 0 :(得分:1)
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;
}
模板参数只能从 function-template 参数中推断出来。这里,您的函数模板唯一的参数是sizeOfArray
,它是int
。编译器如何知道typename looptype
是什么?由于无法推断,因此必须明确指定它。
int* x= gA.returnArray<int>(sizeOfArray);
而不是:
int* x= gA.returnArray(sizeOfArray);
BTW,当我知道它只能是代码的这一行所售出的looptype
时,有一个模板参数int
是什么意思:
...
looptype* inputArray= (int*)malloc(sizeof(int)*sizeOfArray);
...
您使用malloc
是可怕的。对于几乎相同的性能,您使简单的任务变得复杂。喜欢std::vector<int>
或更糟糕的情况std::unique_ptr<int[]>
。