以文本方式查看主题

-  计算机科学论坛  (http://bbs.xml.org.cn/index.asp)
--  『 C/C++编程思想 』  (http://bbs.xml.org.cn/list.asp?boardid=61)
----  std::tr1  (http://bbs.xml.org.cn/dispbbs.asp?boardid=61&rootid=&id=87919)


--  作者:葛靖青001
--  发布时间:11/24/2010 3:27:00 PM

--  std::tr1
【转自互联网】

今日因为对项目进行重构,开始接触到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还包含很多好东西,继续挖掘!


W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
31.250ms