C++ 定义一个ostream修饰符c++;
我正在生成程序集,我希望所有生成的代码都对齐。这包括让类似于C++ 定义一个ostream修饰符c++;,c++,ostream,iomanip,C++,Ostream,Iomanip,我正在生成程序集,我希望所有生成的代码都对齐。这包括让类似于cout流的函数获取并返回std::ostream&将在流上调用该函数。这是一些标准操纵器的定义方式,如果它们不需要任何参数,这是创建自己的操纵器的最快方法: namespace cds { std::ostream& pad(std::ostream& os) { return os << '\t' << std::setfill(' ') << std::setw(8);
cout流的函数获取并返回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';
}
正如评论中所指出的,您实际上不需要不断重复,但由于您不知道(从操纵器作者的角度来看)在这段时间内流上会调用什么,您也可以这样做
另外,正如我所解释的,许多开发人员(包括我自己在内)都考虑使用<代码> EntL>代码>一个不好的实践。
<代码> OfStase<代码>定义了<代码>的超载操作程序,除了<代码> SEtW商店< /代码>是“粘性的”,所以您不必重复它们。您误读<代码>蒸汽<代码>作为<代码>流<代码>吗?
$ ./SO
Hello
World
#include <iostream>
#include <iomanip>
using namespace std;
ostream& foo(ostream& s) {
return s << hex << setw(4) << setfill('#');
}
int main() {
cout << foo << 42;
return 0;
}