std::string に変換するときに、boost::lexical_cast に正符号を含めるにはどうすればよいですか?
を使用する場合、組み込み型のフォーマットを制御する方法はありませんboost::lexical_cast<>
。
boost::lexical_cast<>
ストリームを使用してフォーマットを行います。したがって、新しいクラスとそのオーバーロードoperator<<
を作成し、boost::lexical_cast<>
そのオーバーロードされた演算子を使用してクラスの値をフォーマットできます。
#include <boost/lexical_cast.hpp>
#include <iomanip>
#include <iostream>
template<class T> struct ShowSign { T value; };
template<class T>
std::ostream& operator<<(std::ostream& s, ShowSign<T> wrapper) {
return s << std::showpos << wrapper.value;
}
template<class T>
inline ShowSign<T> show_sign(T value) {
ShowSign<T> wrapper = { value };
return wrapper;
}
int main() {
std::string a = boost::lexical_cast<std::string>(show_sign(1));
std::cout << a << '\n';
}