Ограничение общего размера результата с C ++ 20 fmt - PullRequest
3 голосов
/ 26 февраля 2020

Я знаю, что могу ограничить размер конкретного строкового аргумента, но IDK, как это сделать для всего вывода. Другими словами, может ли эта программа быть написана только с одним вызовом в формате?

#include <string>
#include <iostream>
#include <fmt/format.h>

int LOG_MAX_MESSAGE_LENGTH = 11;

void f(const char* p) {
    std::cout << fmt::format("{:.{}}", fmt::format("ABI is {}", p),
                             LOG_MAX_MESSAGE_LENGTH)
              << std::endl;
}

int main() {
    f("hellooooo");
}

1 Ответ

4 голосов
/ 26 февраля 2020

Существует также format_to_n, который принимает выходной итератор и размер (а затем обычную строку формата и аргументы).

format_to_n(
    std::ostream_iterator(std::cout), LOG_MAX_MESSAGE_LENGTH,
    "ABI is {}", p);
...