0

単体テストに静的ポリモーフィズムを適用しようとしています

template<typename T, typename Output> class HistogramWriter
{
public:
    static void write(const RGBHistogram<T> &hist, Output &output)
    {
       output << "ABCD" << std::endl;
    }
};

今、単体テスト用のモッククラスへの出力を作成しようとしています

struct TestMock
{
    std::string data;
};

istream& operator>>(istream &stream, TestMock &mock)
{
    stream >> mock.data;
}

T を int に、Output を TestMock に設定すると、機能しません。もちろん、Output を std::cout に設定すれば機能します。

文字列を TestMock のデータにコピーしようとしています。しかし、私はそれを行う方法がわかりません.コンパイラは、バイナリ '<<' 演算子が見つかりませんと不平を言っています

4

1 に答える 1

2

HistogramWriter::write出力演算子を使用して に書き込みoutputます。ただし、TestMockクラスには出力演算子を提供せず、入力演算子のみを提供します。

また、パラメータは、クラスに を定義することにより、 に出力できるストリームoutputであることが期待されます。ストリームに のインスタンスを出力する方法をコンパイラに指示するだけで、ストリーム自体は定義しません。operator<<TestMockTestMock

これを解決するには、テンプレートを使用してクラス内で出力演算子を宣言する必要があります。このようなもの:

struct TestMock
{
    std::string data;

    template<class T>
    TestMock& operator<<(const T& value)
    {
        std::ostringstream os;
        os << value;
        data += os.str();
        return *this;
    }
};

上記のコードは、 のインスタンスをTestMockストリームのように動作させ、それに送信されるすべての出力がdataメンバー変数に追加されます。

入力演算子と出力演算子、およびそれらをオーバーロード/オーバーライドする方法について詳しく読むことをお勧めします。

于 2012-09-13T13:27:50.873 に答える