【发布时间】: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<<。我需要在f 中修复什么来编译我的代码?
【问题讨论】:
-
我不认为这是同一个问题。我不想创建自定义操纵器,我只想使用作为参数传递给函数的现有操纵器。
-
在里面调用 (*pManip)(std::cout)
-
去
std::cout << pManip; -
std::cout << pManip将打印函数的地址。 (pManip是一个函数指针。)请参阅 Sveltely 的答案以获取正确的代码。
标签: c++ manipulators