【问题标题】:How pass std::endl to a function and use it?如何将 std::endl 传递给函数并使用它?
【发布时间】:2014-04-08 05:00:38
【问题描述】:

我想弄清楚如何将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&lt;&lt;。我需要在f 中修复什么来编译我的代码?

【问题讨论】:

  • 我不认为这是同一个问题。我不想创建自定义操纵器,我只想使用作为参数传递给函数的现有操纵器。
  • 在里面调用 (*pManip)(std::cout)
  • std::cout &lt;&lt; pManip;
  • std::cout &lt;&lt; pManip 将打印函数的地址。 (pManip 是一个函数指针。)请参阅 Sveltely 的答案以获取正确的代码。

标签: c++ manipulators


【解决方案1】:
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"; 
}

【讨论】:

  • 请注意,const 函数指针也是允许的:例如void f(std::ostream&amp;(* const pManip)(std::ostream&amp;)).
猜你喜欢
  • 2015-09-17
  • 2015-09-03
  • 1970-01-01
  • 1970-01-01
  • 2013-12-09
  • 1970-01-01
  • 2019-09-27
  • 2011-04-18
  • 1970-01-01
相关资源
最近更新 更多