我在iomanip
上遇到了麻烦。我认为一个简化的代码可以比语言更好地解释一切。
#include <iostream>
#include <iomanip>
#include <string>
struct Dog {
std::string name;
int age;
};
std::ostream& operator<<(std::ostream& os, Dog dog) {
return os << dog.name << ", " << dog.age << "yo";
}
int main() {
Dog dog;
dog.name = "linus";
dog.age = 10;
std::cout
<< std::left << std::setw(20) << std::setfill(' ') << "INFO"
<< std::left << std::setw(20) << std::setfill(' ') << "AVAILABLE" << std::endl;
std::cout
<< std::left << std::setw(20) << std::setfill(' ') << dog
<< std::left << std::setw(20) << std::setfill(' ') << "yes";
std::cin.get();
}
我想打印一个格式很好的表格,但是我的输出对齐不好,简单地说,当我cout
我的狗,setw
和setfill
只在www.example.com上工作dog.name(由于operator<<
的性质),结果如下
INFO AVAILABLE
linus , 10yoyes
代替
INFO AVAILABLE
linus, 10 yo yes
显然,我可以修改operator<<
,只在os
上附加一个string
,但在真实的情况中,我必须更改大量复杂的定义(我宁愿避免这样的更改!:D)
你知道吗?
2条答案
按热度按时间xzv2uavs1#
setw
操作器设置 next 输出的字段宽度,在本例中是dog.name
。如果你想直接在重载函数中使用流,确实没有办法绕过它。unftdfkk2#
试试看