如何在C++中实现泛型这个功能(即基于模板的)
我使用gcc版本4.6.3。我想实现一个函数来分配二维矩阵并初始化它们。我使用了以下代码,但我想要一个基于模板的或通用的代码。我想要一个通用函数来同时处理bool、float和double。在所有情况下,这个过程都是相似的。你能帮我一下吗,或者给我介绍一种更好的分配2d矩阵的方法如何在C++中实现泛型这个功能(即基于模板的),c++,templates,generics,C++,Templates,Generics,我使用gcc版本4.6.3。我想实现一个函数来分配二维矩阵并初始化它们。我使用了以下代码,但我想要一个基于模板的或通用的代码。我想要一个通用函数来同时处理bool、float和double。在所有情况下,这个过程都是相似的。你能帮我一下吗,或者给我介绍一种更好的分配2d矩阵的方法 void doubleAlloc2D(double ** &t, int r, int c,double initialValue=0) { t=new double*[r]; if (!t)
void doubleAlloc2D(double ** &t, int r, int c,double initialValue=0)
{
t=new double*[r];
if (!t)
{
if (DETAILS) std::printf ("Not enough memory.(code: 461546596551)\n");
getchar();
exit(-1);
}
for (int i=0;i<r;i++)
{
t[i] = new double[c];
if (!t[i])
{
if (DETAILS) std::printf ("Not enough memory.(code: 461651651)\n");
getchar();
exit(-1);
}
for (int j=0;j<c;j++)
t[i][j] = initialValue;
}
}
你没有具体说明你想要什么是通用的,但我猜 类型和可能的尺寸。通常的创建方法 包含容器的对象,无论是C++还是泛型,都是定义它的。 作为一个班级。比如:
template <typename T, int rows, int columns>
class Matrix
{
std::vector<T> myData;
public:
Matrix( T const& init = T() )
: myData( rows * columns, init )
{
}
T* operator[]( int index )
{
return &myData[0] + index * columns;
}
T const* operator[]( int index ) const
{
return &myData[0] + index * columns;
}
// ...
};
如果不希望行和列成为编译时常量,
从模板参数中删除它们,然后将它们添加到
构造函数参数。别忘了救他们
一个稍微复杂但仍然不太难的解决方案
将使用代理类作为
运算符[],而不是T*。另一个常见的解决方案是
重写用于索引的运算符int i、int j,并使用
mi,j语法,而不是m[i][j]
<>在C++中没有任何理由使用数组new。C++是
不是C,您不应该试图将其编程为C。什么是通用的?任何类型而不是双精度?使用std::vector。然后它会自动泛型,函数会变得冗余。new在内存不足时抛出,它不会返回null。除非你在一个古老的编译器上,否则我会远离模板。模板STD::vector alOnt2Dint t,int c,t初始化值= t{返回:STEC::VECRTRR,STD::VECCORTC,IMAGINALVALL;} OMG C++代码可以这么短!我喜欢那些错误代码!请你介绍我一本书,我可以了解更多关于6和第七行,矩阵T const和init=t:MyDeaStudio*列,init @ ReMo,只是关于任何C++入门课程应该涵盖它。两个非常好的编程:原理和实践,Bjarne Stroustrup为初学者,加速C++,Andy Koenig和Barbara Moo为更高级程序员。