C++: Шаблон для std::format списка объектов, доступных std::format()?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 C++: Шаблон для std::format списка объектов, доступных std::format()?

Сообщение Anonymous »

Это работает так, что я могу передать объект любого класса, у которого есть метод std::string format(), в std::format():

Код: Выделить всё

template
requires requires (T v) {
{ v.format() } -> std::convertible_to;
}
struct std::formatter : formatter
{
auto format(T t, format_context& ctx) const
{
return formatter::format(t.format(), ctx);
}
};
...так почему же это не работает для списка таких объектов?

Код: Выделить всё

template
requires requires (T v) {
{ v.format() } -> std::convertible_to;
}
struct std::formatter : formatter
{
auto format(std::list list, format_context& ctx) const
{
std::string result;
bool first = true;
for (T& item: list) {
if (!first)
result += ", ";

result += formatter::format(item.format(), ctx);

first = false;
}

return result;
}
};
Основная ошибка:

Код: Выделить всё

/libutil/include/util/format.h:38:14: error: no match for ‘operator+=’ (operand types are ‘std::string’ {aka ‘std::__cxx11::basic_string’} and ‘std::basic_format_context::iterator’)
38 |       result += formatter::format(item.format(), ctx);
|       ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Нужно ли мне каким-то образом превратить объект Basic_format_context в std::string? Как?

Подробнее здесь: https://stackoverflow.com/questions/790 ... ble-things
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»