次のプログラム:
#include <boost/container/string.hpp>
#include <boost/lexical_cast.hpp>
#include <folly/FBString.h>
#include <iostream>
class foo { };
std::ostream& operator<<(std::ostream& stream, const foo&) {
return stream << "hello world!\n";
}
int main() {
std::cout << boost::lexical_cast<std::string>(foo{});
std::cout << boost::lexical_cast<boost::container::string>(foo{});
std::cout << boost::lexical_cast<folly::fbstring>(foo{});
return 0;
}
次の出力が得られます。
hello world!
hello world!
terminate called after throwing an instance of 'boost::bad_lexical_cast'
what(): bad lexical cast: source type value could not be interpreted as target
これは、が のような型であるlexical_cast
ことを認識せず、単純に通常の変換を行っているためです。ただし、文字列の場合、最初の空白で停止し、入力全体が消費されていないことが検出され、例外がスローされます。fbstring
string
stream << in; stream >> out;
operator>>
lexical_cast
lexical_cast
について教える方法はありますかfbstring
(または、より一般的には、のようstring
なタイプ)?