CLX C++ Libraries
Home >> lexical_cast

Declarations

template <class Type, class Source>
Type lexical_cast(const Source& src, std::ios::fmtflags base = 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