CLX C++ Libraries - lexical_cast
Author: clown

CLX C++ Libraries
Home >> lexical_cast

# Declarations

    template <class Type, class Source>
    Type lexical_cast(const Source& src, std::ios::fmtflags = std::ios::dec);

    class bad_lexical_cast : public std::bad_cast;

# Overview

lexocak_cast() は，文字列<->数値の相互変換を行うための関数です． boost::lexical_cast をベースに実装しています．引数 base には基数として， std::ios::dec，std::ios::hex，std::ios::oct を指定することができ， それぞれ与えられた文字列を 10 進数，16 進数，8 進数と見なして変換がなされます． また，std::ios::showbase を指定すると与えられた文字列に応じた変換がなされます （e.g., 0xfa なら 16 進数として変換される）．

lexical_cast() はキャストに失敗するとbad_lexical_cast を例外として送出します．

# Example

example_lexical_cast.cpp

    #include <iostream>
    #include <string>
    #include "clx/lexical_cast.h"

    int main(int argc, char* argv[]) {
        std::string s1 = "326";
        std::string s2 = "0xf2a";
        std::string serr = "nonum";

        try {
            int a = clx::lexical_cast<int>(s1, std::ios::oct);
            int b = clx::lexical_cast<int>(s2, std::ios::showbase);

            std::cout << "str " << s1 << ", val " << a << std::endl;
            std::cout << "str " << s2 << ", val " << b << std::endl;

            std::string s3 = clx::lexical_cast<std::string>(a, std::ios::hex);
            std::cout << "val " << a << ", str " << s3 << std::endl;

            int c = clx::lexical_cast<int>(serr);
            std::cout << "str " << serr << ", val " << c << std::endl;
        }
        catch (clx::bad_lexical_cast e) {
            std::cerr << "exeption: " << e.what() << std::endl;
            std::exit(-1);
        }

        return 0;
    }

    Result
    str 326, val 214
    str 0xf2a, val 3882
    val 214, str d6
    exeption: bad lexical cast

# Template Parameters

Type
  変換後の型を指定します．
Source
  変換前の型．引数として指定した変数の型が適用されます．

# References

1. Boost C++ Libraries - lexical_cast