如何使boost::lexical_cast在转换为std::string时包含一个正号?
我打算做同样的事情:snprintf( someArray, someSize, "My string which needs sign %+d", someDigit );。在这里,如果字符串为正,则将someDigit放入字符串中;如果为负,则将字符串中的数字设置为-someDigit。请参阅:http://www.cplusplus.com/reference/clibrary/cstdio/snprintf/
发布于 2012-10-15 19:24:04
如何使boost::lexical_cast在转换为std::string时包含一个正号?
在使用boost::lexical_cast<>时,无法控制内置类型的格式。
boost::lexical_cast<>使用streams进行格式化。因此,可以创建一个新类并为其重载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';
}https://stackoverflow.com/questions/12892580
复制相似问题