以文本方式查看主题 - 计算机科学论坛 (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 |