1

std::endl関数にマニピュレータのようなものを渡し、渡されたマニピュレータを関数で使用する方法を理解したいと思います。次のように関数を宣言できます。

void f(std::ostream&(*pManip)(std::ostream&));

そして、私はそれを次のように呼び出すことができます:

f(std::endl);

それは大丈夫です。私の問題は、内部でマニピュレータを使用する方法を理解することfです。これは機能しません:

void f(std::ostream&(*pManip)(std::ostream&))
{
  std::cout << (*pManip)(std::cout);            // error
}

コンパイラに関係なく、エラーメッセージは、コンパイラがどれoperator<<を呼び出すべきかを判断できないことに要約されます。fコードをコンパイルするには、内部で何を修正する必要がありますか?

4

1 に答える 1

5
void f(std::ostream&(*pManip)(std::ostream&))
{
  std::cout << "before endl" << (*pManip) << "after endl"; 
}

また

void f(std::ostream&(*pManip)(std::ostream&))
{
  std::cout << "before endl";
  (*pManip)(std::cout);
  std::cout << "after endl"; 
}
于 2014-04-08T05:23:59.187 に答える