-1

ANSI カラー コードを使用して、Unix コンソールで出力をフォーマットしています。

const auto& getCode(Color mColor) 
{
    static std::map<Color, std::string> codes;
    // ...
    return codes[mColor]
}

cout << getCode(Color::Red) << "red text";

std::setwただし、やなどのマニピュレータを使用するstd::leftと、文字の集まりであるため、結果はカラー コードの影響を受けます。

この問題にどのように対処すればよいですか? ストリーム マニピュレータにカラー コードを無視させる方法はありますか?

4

1 に答える 1

4

によって返される型は何getCodeですか? std::stringまたはでない場合は 、影響を与えたくない書式設定データを無視する for をchar const*記述するだけです。 それが C++ の文字列型の 1 つである場合は、そのオブジェクト型<<の を使用して、呼び出しを特別なオブジェクトでラップする必要があります。たとえば、次のようになります。<<

class ColorCode
{
    ColorType myColor;
public:
    ColorCode(ColorType color) : myColor( color ) {}
    friend std::ostream& operator<<( std::ostream& dest, ColorCode const& cc )
    {
        std::string escapeSequence = getCode( myColor );
        for ( char ch : escapeSequence ) {
            dest.put( ch );
        }
        return dest;
    }
};
于 2014-09-23T13:47:13.793 に答える