2
4

2 に答える 2

3

使用できます

static void Dump( std::ostream& os, Book& b, format_f f )
{
    f(os); os << b;
}

( returnf(os) << b以降では機能しませんf。MMの回答を見ると、おそらくあなたが達成したかったものとはまったく異なります)std::ios_basestd::basic_ostream

于 2013-10-09T13:41:08.287 に答える
1

出力ストリームは<<、このタイプの関数に対して演算子のオーバーロードを提供しているため、以下のシグネチャを持つ関数を受け入れます。

std::ios_base& function( std::ios_base& os )

しかし、あなたはstd::functionそれとはかけ離れた a を渡しています。has 演算子のオブジェクトはstd::function、関数のように使用できますが、実際には関数ではありません。したがって、そのストリームはそれらを受け入れることができません。()

代わりにテンプレートの方法を使用するstd::functionと、簡単に修正できます。

template <typename F>
static void Dump( std::ostream& os, Book& b, F f )
{
    os << f << b;
}
于 2013-10-09T13:40:56.177 に答える