体会template

类别:编程语言 点击:0 评论:0 推荐:

今天在我编程史上写下了光辉的一页:成功的使用模板编程,不但方便灵活,而且使代码精简了一半。爽!

要求:在图像上画手画线或不规则多边形,然后计算它们的周长与面积,再把周长、面积写到图像上
以前的代码是编写两个函数,因为操作的对象不同,这里分别为:LAnnFreehand,LAnnPolyline,他们都是继承于LAnnotatiion
代码如下:
/*
*函数名称: CalcEllipseArea
*函数功能: 计算椭圆面积
*函数参数1: &LAnn指定的注释类
*函数参数2:uAnnEvent响应事件类型
*返 回 值: 返回计算出的不规则模板的周长与面积字符串
*说    明: 为了适应不同的不规则注释,该函数使用泛型编程方法
*           使用模板定义所注释的类,可以大大节省代码空间
*/
template<class T>
CString CAnnDemoBitmap::CalcAbnormityTemp(T &LAnn,L_UINT uAnnEvent )
{
 int nPointCount;
 LBuffer  LeadBuffer ; 
 pANNPOINT pPoints = NULL; file://对象点的指针
 int  nRet;  file://返回值
 int  nGirth;
 int  nArea;
 CString  strMsg;  file://annotation name

 if (uAnnEvent == LTANNEVENT_AUTOITEMCHANGED)
 {
  nPointCount = LAnn->GetPointCount();
 }
 else
 {
  nPointCount = LAnn->GetPointCount() + 1;
 }

 LeadBuffer.Reallocate( sizeof( ANNPOINT ) * nPointCount );
 pPoints = ( pANNPOINT )LeadBuffer.Lock() ;
 file://Now, get the points 
 nRet=LAnn->GetPoints( pPoints );
 pPoints[ nPointCount - 1 ] = pPoints[ 0 ];
 nRet=LAnn->SetPoints( pPoints, nPointCount );
 nGirth = CalcHandLineGirth( nPointCount, pPoints );
 nArea  = CalcHandLineArea( nPointCount, pPoints );
 strMsg.Format( "Girth:%dpixel Area:%d pixel", nGirth, nArea );
 LeadBuffer.Unlock();
 LeadBuffer.Free();

 return strMsg;
}
哇,原来使用泛型编程是如此之爽!

本文地址:http://com.8s8s.com/it/it29820.htm