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