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 回答