boost 字符串与文本处理 -> lexical_cast

来源:互联网 发布:lol符文法师咋样知乎 编辑:程序博客网 时间:2024/05/29 19:13

lexical_cast P178

  1. 示例代码

        #include <boost/lexical_cast.hpp>    int main()    {        using namespace boost;        int x = lexical_cast<int>("100");        long y = lexical_cast<long>("2000");        float pai = lexical_cast<float>("3.14159e5");        double e = lexical_cast<double>("2.71828");        cout<< x << y << pai << e << endl;        string str = lexical_cast<string>(456);        cout<<str<<endl;        cout<<lexical_cast<string>(0.618)<<endl;        cout<<lexical_cast<string>(0x10)<<endl;    }
  2. 异常bad_lexical_cast
    当lexical_cast无法执行转换操作时会抛出异常bad_lexical_cast。我们可以利用bad_lexical_cast来验证数字符串的合法性,实现一个模板函数num_valid()的代码如下:

            template<typename T>        bool num_valid(const char* str)        try        {            lexical_cast<T>(str);            return true;        }        catch(bad_lexical_cast&)        {            return false;        };
  3. 应用于自己的类

    示范

    class demo_class{    friend std::ostream& operator<<(std::ostream& os, const demo_class& x)    {    os<<"demo_class's Name";    return os;    }};int main(){    cout << lexical_cast<string>(demo_class())<<endl;}

    模板类 输出类名

        template<typename T>    struct outable    {        friend std::ostream& operator<<(std::ostream& os, const T& x)        {            os <<typeid(T).name();            return os;        }    };    class demo_class:outable<demo_class>{};    int main()    {        cout<<lexical_cast<string>(demo_class())<<endl;    }
0 0