boost中的lexical_cast和numeric_cast

#include "stdafx.h"

using namespace std;
using boost::lexical_cast;
using boost::bad_lexical_cast;
using boost::numeric_cast;
using boost::bad_numeric_cast;

template
<class T>
bool IsValid(const string& num){
    
bool flag=true;
    
try{
        T temp
=lexical_cast<T>(num);
    }
    
    
catch (CFileException* e){
        flag
=false;
    }
    
return flag;
}

using std::endl;

int _tmain(int argc, _TCHAR* argv[])
{
    
string s="6.02e-2";
    
try{
    cout
<<lexical_cast<double>(s)<<endl;
    
//cout<<lexical_cast<int>(s)<<endl;
    }catch(bad_lexical_cast&e){
        cerr
<<e.what()<<endl;
    }

    
try{
        
int i=32767;
        
short s=numeric_cast<short>(i);
        cout
<<s<<endl;
        i
++;

        s
=i;//发生上溢
        cout<<s<<endl;//输出-32768

        s
=numeric_cast<short>(i);//抛出异常
      
        
int n=-3;
        unsigned 
int m=n;//发生下溢
        cout<<m<<endl;//输出4294967293

        m
=numeric_cast<unsigned int>(n);//抛出异常
    }
    
catch(bad_numeric_cast&e){
        cerr
<<e.what()<<endl;
    }
    
    
return 0;
}
posted on 2008-12-23 10:54  风荷小筑  阅读(569)  评论(0编辑  收藏  举报