如何将std :: endl传递给函数并使用它?

时间:2014-04-08 05:00:38

标签: c++ manipulators

我想弄清楚如何将类似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内修复我的代码才能编译?

1 个答案:

答案 0 :(得分: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"; 
}