std::tr1全身都是宝
来源:优易学  2010-1-14 19:03:23   【优易学:中国教育考试门户网】   资料下载   IT书店

  今日因为对项目进行重构,开始接触到std::tr1下的一些内容,开始对自己以前不太熟悉的泛型编程有了一些比较深入的了解。最近用到了tr1名字空间下的mem_fn,regex都在我们对项目的重构中起了重要的作用。tr1成为传统C++的有益补充。这里我们来看一下我利用regex对原来几个函数的重构。

  首先是一个判断一个字符串是否是一个数字的函数,在原来的实现中,我的检查并不完全,有时候又漏桶。利用regex,就可以很好地覆盖各种情况,完成比较严密的数字检查。我的项目中,对数字的要求是浮点数或者是浮点数加上字符后缀。列入,0.124,451.2A,-34.4TD等都是合法的数字。我在网络流传广泛的正则表达式的基础上做了些修改,轻松完成了这个函数。

  bool GridColChecker::IsNumber( wstring strText )

  {

  // check character or number

  trim(strText);

  wregex rx(_T("^-?([1-9]\\d*\\.\\d*|0\\.\\d*[1-9]\\d*|0?\\.0+|0|[1-9]\\d*)[A-Z]{0,2}$"));

  //wregex rx(_T("^-?\\d*[.]\\d*[A-Z]{0,2}$"));

  return regex_match(strText, rx );

  /*

  int nCheck = 0; // first char

  if (strText.size() >= 2)

  {

  nCheck = 1; // second char

  }

  if(strText.size()== 0)

  {

  return false;

  }

  wchar_t cCheckChar = strText.at(nCheck);

  if (!isdigit( cCheckChar)

  && cCheckChar != '.')

  {

  return  false;

  }

  return true;

  */

  }

  从代码中我们可以看到,只需要两航代码,实现了原来需要数十行代码的功能,并且更加严密。嗯,tr1真是全身都是宝。tr1还包含很多好东西,继续挖掘!

责任编辑:cyth

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训