提升::lexical_cast,带有正号


如何

使 boost::lexical_cast 在转换为 std::string 时包含一个正号?

我打算做同样的事情:snprintf( someArray, someSize, "My string which needs sign %+d", someDigit );.在这里,someDigit 如果它是正数,则作为 +someDigit 放入字符串中,如果它是负数,则 -someDigit 放入字符串中。请参阅:http://www.cplusplus.com/reference/clibrary/cstdio/snprintf/

如何使 boost::lexical_cast 在转换为 std::string 时包含一个正号?

使用 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';
}

相关内容

  • 没有找到相关文章

最新更新