Я пытаюсь создать элегантную систему ведения журнала на C++. В настоящее время я использую printf()
, хотя cout
также может быть одним из вариантов.Строка формата с пробелами
То, что я хочу достичь, это что-то вроде этого
console_log("ClassName", "funcName", "Message.");
Моего текущего кода для этого просто:
static void console_log(const std::string & className, const std::string & funcName, const std::string & message) {
printf("%s : %s : %s\n", className.c_str(), funcName.c_str(), message.c_str());
}
Он печатает красиво, как это
// For example:
console_log("MenuPanel", "selectedThisButton", "Something happened.");
console_log("MenuPanel", "selectedAnotherButton", "Another thing happened.");
// Output:
MenuPanel : selectedThisButton : Something happened.
MenuPanel : selectedAnotherButton : Another thing happened.
Однако, Я хочу, чтобы его печатали таблично-подобным образом, где все «столбцы» выровнены правильно. Например:
MenuPanel : selectedThisButton : Something happened.
MenuPanel : selectedAnotherButton : Another thing happened.
Как сделать так, чтобы первый и второй «столбцы» имеют точно такую же ширину/количество символов, с дополнительными пробелами, если это необходимо? Он не должен быть динамичным. Будет делать что-то вроде установки «столбца» на 16 символов.
Я не хочу использовать сторонние библиотеки для чего-то простого, как это. И, если возможно, нет boost
.
«элегантный система каротажа в C++ "должна быть единственным самым вновь изобретенным колесом. –
Как вы хотите исправить ширину? Если он жестко запрограммирован, вы можете просто добавить столько пробелов, сколько вам нужно, после вычисления длины строки. – ChronoTrigger
Даже попытка этой простой задачи подсчета не дает мне достаточного доказательства того, что вопрос должен быть закрыт. О, и ['printf'] (http://linux.die.net/man/3/printf) имеет операторов выравнивания, если нужно прочитать справочную страницу (например,' printf («% -16s», ...); '). –