0

std::string に変換するときに、boost::lexical_cast に正符号を含めるにはどうすればよいですか?

私は次と同じことをするつもりです: snprintf( someArray, someSize, "My string which needs sign %+d", someDigit );. ここで、someDigit は、正の場合は +someDigit として、負の場合は -someDigit として文字列に入れられます。参照: http://www.cplusplus.com/reference/clibrary/cstdio/snprintf/

4

1 に答える 1

0

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';
}
于 2012-10-15T11:24:03.880 に答える