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;
}