如何使用参数创建操纵器



我不能用这个参数创建一个操纵器,告诉我如何实现它。

写入错误:

对非常量参数的引用的初始值必须是左侧值。

函数调用中的参数太少。

#include <iostream>
using namespace std;
char s[] = "Hello, world!n";
ostream& endp(ostream& stream, int n)
{
static int count = 0;
int max_count = 4;
for (int i = 0; s[i] != ''; i++) {
if (s[i] == 'n')
count++;
if (count == max_count) {
stream << "----------n";
count = 0;
}
}
return stream;
}
int main()
{
for (int i = 0; i < 9; i++)
cout << s << endp(3);
return 0;
}

为了创建一个接受参数的流操纵器,您需要一个代码目前缺乏的额外步骤-您需要操纵器函数不接受std::ostream(或std::istream(作为输入,而是返回一个代理对象,然后您需要重载operator<<(和/或operator>>(以接受该代理作为输入。例如:

#include <iostream>
struct endp_s 
{
int value;
};
endp_s endp(int n)
{
return endp_s{n};
};
std::ostream& operator<<(std::ostream& stream, const endp_s& in)
{
// use stream and in.value as needed...
return stream;
}
int main()
{
std::cout << endp(3);
return 0;
}

实时演示

如果你在cppreference.com上查看<iomanip>中的任何标准IO操纵器,你会发现它们都是作为返回"未指定"类型的独立函数实现的。这些是具有operator<<operator>>重载的代理对象。

最新更新