1

myCout 引数に文字列を含む関数を作成しようとしています。この文字列は、出力の配置を設定するためのものです。つまり"left"、引数として execute を持っている場合cout<<std::left;です。

以下にコードを添付しました。

ostream & myAlign (string str) {

        if (str == "left")
            return  std ::left ; 
        else 
            return std::right ;
}

template <class T>
void myCout (int width, char fill, T var, string a) {

    cout << setw(width) << setfill(fill) << setprecision(2) << myAlign(a) << std:: fixed << var << "\t" <<flush ;    
    return ;
}

事前にご協力いただきありがとうございます

4

1 に答える 1

4

IO マニピュレータは魔法ではありませんが、奇妙に思えるかもしれません。これを行うにはいくつかの方法がありますが、これはその 1 つにすぎず、探しているように見える動作を模倣しています..

#include <iostream>
#include <iomanip>

class myAlign
{
public:
    explicit myAlign(const std::string& s)
        : fmt((s == "left") ? std::ios::left : std::ios::right)
    {}

private:
    std::ios::fmtflags fmt;

    friend std::ostream& operator <<(std::ostream& os, const myAlign& arg)
    {
        os.setf(arg.fmt);
        return os;
    }
};

int main(int argc, char *argv[])
{
    std::cout << myAlign("left") << std::setw(10) << "12345" << std::endl;
    std::cout << myAlign("right") << std::setw(10) << "67890" << std::endl;
    return 0;
}

出力

12345     
     67890

注: 同様の、しかしかなり複雑な関連する質問がここにあります

于 2013-11-14T08:12:44.033 に答える