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

How pass std::endl to a function and use it?

本文关键字:函数 std endl      更新时间:2023-10-16

我想知道如何将类似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中修复什么才能编译代码?

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"; 
}
相关文章: