传递std :: left作为参数

时间:2017-06-27 15:57:38

标签: c++ io stream output manipulators

我有一个显示内容的功能,其中字符定位可以不同。功能如下:

void display(std::ostream & stream, std::ios_base & positioning);

然而,当我尝试像这样调用这个函数时

display_header(std::cout, std::left);

我收到以下错误

error: non-const lvalue reference to type 'std::ios_base' cannot bind to a value of unrelated type 'std::ios_base &(std::ios_base &)'

我不明白为什么std::cout可以正常通过,但std::left拒绝这样做。另外,lvalue reference to type 'std::ios_base'lvalue reference to type 'std::ios_base'的区别如何?

1 个答案:

答案 0 :(得分:4)

与大多数stream manipulators一样,std::left是一个函数,而不是一个变量。 display需要更改为

void display(std::ostream & stream, std::ios_base &(*positioning)(std::ios_base &));

接受leftrightinternalstd::ios_base &(std::ios_base &)类型的任何其他操纵者。