http://www.cplusplus.com/reference/iostream/manipulators/
编辑:对不起,我有点人手不足。我的意思是研究 iomanip 的工作原理,我知道你知道 sets(n) << ""
使用 iomanip 作为快速而肮脏的实现的基线,这就是我想出的:
#include <iostream>
#include <iomanip>
#include <string>
class setpw_ {
int n_;
std::string s_;
public:
explicit setpw_(int n) : n_(n), s_("") {}
setpw_(int n, const std::string& s) : n_(n), s_(s) {}
template<typename classT, typename traitsT>
friend std::basic_ostream<classT, traitsT>&
operator<<(std::basic_ostream<classT, traitsT>& os_, const setpw_& x) {
os_.width(x.n_);
os_ << "";
if ( x.s_.length()){
os_ << x.s_;
}
return os_;
}
};
setpw_ setpw(int n) { return setpw_(n); }
setpw_ indent(int n, const std::string& s) { return setpw_(n, s); }
int
main(int argc, char** argv) {
std::cout << setpw(8) << "Hello, World" << std::endl;
std::cout << indent(8, "----^BYE^---") << std::endl;
return 0;
}