У меня проблемы с iomanip
. Я думаю, что упрощенный код может объяснить все лучше, чем слова.C++ форматирование таблицы 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
работает только на dog.name (из-за характера operator<<
) и получается нечто вроде
INFO AVAILABLE
linus , 10yoyes
вместо
INFO AVAILABLE
linus, 10 yo yes
Очевидно, что я может изменить operator<<
, добавив только один string
в os
, но в моем реальном случае мне нужно изменить тонны сложных определений (и я предпочитаю избегать таких изменений!: D)
Любая идея?