【发布时间】:2022-12-29 12:29:23
【问题描述】:
我想用 C++ fmt 在引用值后填充。 我知道我可以一步完成引用,然后将 fmt 与一个参数一起使用,但我认为这样做速度较慢,而且从可读性的角度来看,我想一次性完成。 我有这个solution。
但这似乎有点笨拙,我正在手动进行对齐计算,以考虑到我在值周围引用的事实......
#include <array>
#include <string>
#include <iostream>
#include <fmt/format.h>
void write_padded(const int i,char* data) {
// note: - format_to_n will not zero termiante if out of space
// - use '^' as a fill char for visibility
auto result = fmt::format_to_n(data,7, R"("{}{:^<5})",i,'\"');
*result.out = '\0';
}
int main() {
// space for 5 digits, 2 quotes \0
std::array<char, 8> data{};
write_padded(1, data.data());
std::cout << data.data() << std::endl;
write_padded(10, data.data());
std::cout << data.data() << std::endl;
write_padded(123456789, data.data());
std::cout << data.data() << std::endl;
write_padded(54321, data.data());
std::cout << data.data() << std::endl;
}
这似乎可行,但我想在不手动计算 width 的情况下执行此操作。也许还有更好的格式字符串。
注意:我知道整数可以超过 5 位数字并且幻数是不好的,但即使使用命名变量我仍然需要进行计算。
【问题讨论】: