gpt4 book ai didi

c++ - 定义一个ostream修饰符c++

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:14:17 26 4
gpt4 key购买 nike

我正在生成程序集,我希望对齐所有生成的代码。这包括像 cout<<"\t"<<left<<setfill(' ')<< setw(8); 这样的东西在每个指令的前面。我怎样才能声明一个 ostream 修饰符,这样我就不用在每一行都写所有这些代码了。我正在寻找类似的东西:

ostream mod="\t"<<left<<setfill(' ')<< setw(8);
cout<<mod<<"addiu"<<"$sp, $sp, 24"<<endl;

我知道我可以用宏来做到这一点,但我想知道如何用 ostream 对象来做到这一点。

最佳答案

流式处理接受并返回 std::ostream& 的函数将在流中调用该函数。这是一些标准操纵器的定义方式,如果它们不需要任何参数,这是创建您自己的最快的方法:

namespace cds {
std::ostream& pad(std::ostream& os) {
return os << '\t' << std::setfill(' ') << std::setw(8);
}
}

int main() {
std::cout << cds::pad << "Hello" << '\n'
<< cds::pad << "World" << '\n';
}

打印:

$ ./SO 
Hello
World

正如评论中所指出的,您真的不需要不断重复 setfill ,但由于您不知道(从操纵器作者的角度来看)中间流中将调用什么,您也可以。


此外,正如我解释的那样 here ,包括我在内的许多开发人员认为使用 endl 是一种不好的做法。

关于c++ - 定义一个ostream修饰符c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35998233/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com