<iframe align="center" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog.html" frameborder="0" width="728" scrolling="no" height="90"></iframe>
看了凌杰的文章(http://blog.csdn.net/owl2008/archive/2004/09/28/119595.aspx),也想补充两句。lexical_cast比起stringstream来说,的确不一定简洁,当然,其语义和可读性都有提高,但同时也失之灵活。例如下面的情况,似乎就无法用lexical_cast办到。
#include <sstream><br>using namespace std;</sstream>
int main(int, char*[]) {
string hex_str = "0x10";
int i;
std::stringstream convert(hex_str);
convert >> hex >> i;
return 0;
}
如果想像笔者这样在16进制的整数和字符串之间转换,似乎还不得不用stringstream,我阅读了lexical_cast的代码,其实它就是用stringstream实现的,lexical_cast函数本身的代码非常短,如下:
template<typename target typename source><br>Target lexical_cast(Source arg)<br>{<br>detail::lexical_stream<target source> interpreter;<br>Target result;</target></typename>
if(!(interpreter > result))
throw_exception(bad_lexical_cast(typeid(Target), typeid(Source)));
return result;
}
主要的实现部分在lexical_stream的两个重载方法:> 中,
..........
bool operator{
return !(stream }
template<typename inputstreamable><br>bool operator>>(InputStreamable &output)<br>{<br>return !is_pointer<inputstreamable>::value &&<br>stream >> output &&<br>(stream >> std::ws).eof();<br>}<br><br>bool operator>>(std::string &output)<br>{<br>#if defined(BOOST_NO_STRINGSTREAM)<br>stream #endif<br>output = stream.str();<br>return true;<br>}</inputstreamable></typename>
..........
当然,其中的stream是一个经过处理的stringstream,让它可以适应不同的编译器。从这个实现可以看到,我们似乎没有地方可以插入自己的 >> hex >> 之类的代码。也许可以通过对传入的output类型做一个wrapper来实现,但是如果有这个功夫,那又何苦,还不如直接用stringstream更快捷。
分享到:
相关推荐
boost::lexical_cast用法示例,包含数值转字串,字串转数值以及相应的异常处理代码
c++通过boost库实现字符串之间与数字之间的
compiler_lexical_analyzer
使用flex实现的C语言词法分析,在linux和window下都试过,应该不会有问题,内含编译好的exe文件,直接运行可能会报错,需要将编译器地址放入环境变量
lexical analysis explained
Realisation d'un analyseur lexical en cpp et deux fichier .h
这是一个词法分析程序.我认为这对你会有帮助
python写一个简易的词法分析器,比上次的代码加上了一个交互界面,此为demo,可以根据这个代码修改成完整的词法分析器。
boost基本入门使用示例,简单,一看就懂! 部分代码如下: int a = lexical_cast("123"); double b = lexical_cast("123.0123456789"); string s0 = lexical_cast(a);
制作一个简易的编译器,能够对于给出的符合文法规则程序代码能进行词法分析、语法分析、语义分析并最终生成汇编代码。
用C++写的C语言词法分析器,vc6.0开发
Boost.LexicalCast是。 该库适用于常规文字文本转换,例如,以int表示的字符串,反之亦然。 测试结果 @ 建造 测试覆盖率 更多信息 开发分支: 主分支: 执照 根据分发。
编译原理词法分析器;语法分析器LR(1)
一个词法编译器。功能描述在help.txt中有说明。
用MFC实现的C语言词法分析器,是学习编译原理的不错的参考资料,本程序用VS2010编写,此词法分析程序可分析出C语言中: 标识符(以字母或下划线开头,后面可以是数字字母或下划线) 字符串常量 字符常量 ...
The transformation of the formal grammar to the uncertain automata, the content of the lexical analyzer
lexical_syntax_analysis:编译原理词法分析器和语法分析器LR(1)实现C ++
lexical_analyzer
原来我总结过c++的一些类型转换函数:static_cast,...polymorphic_downcast,numeric_cast和lexical_cast。设计的主要原则是:代码必须准确运行而且清晰的表达作者的意图。polynorphic_cast提供更好的类型安全性。在c
写了一个词法分析器 这里以开始定义的PASCAL语言子集的源程序作为词法分析程序的输入数据。在词法分析中,自文件头开始扫描源程序字符,一旦发现符合“单词”定义的源程序字符串时,将它翻译成固定长度的单词内部...