Std :: format обрабатывает определяемый пользователем тип, если он итерабильный‽C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Std :: format обрабатывает определяемый пользователем тип, если он итерабильный‽

Сообщение Anonymous »

Я обновил какой-то более старый код для использования std :: format , и был удивлен, обнаружив, что он работал, несмотря на то, что я забыл предоставить специализацию std :: formatter для этого типа.
Я сразу же сделал небольшую тестовую программу, чтобы попробовать это, но у меня всегда возникали ошибка компонента, как я ожидал. В этом, если пользовательский тип имеет публичное начало и end методы, библиотека отформатирует последовательность как разделенный запятой список, заключенный в квадратные скобки. (Или что-то еще?) < /P>
Вот автономная резо: < /p>

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

#include 
#include 

class MyType {
public:
MyType() : m_values{1, 2, 3, 4} {}

using internal_type = std::array;
using const_iterator = typename internal_type::const_iterator;

const_iterator cbegin() const { return m_values.cbegin(); }
const_iterator cend()   const { return m_values.cend();   }
const_iterator begin()  const { return cbegin(); }
const_iterator end()    const { return cend();   }

private:
internal_type m_values;
};

int main() {
MyType foo;
// Since MyType is a user-defined type, I would not
// expect this print statement to compile without a
// specialization of std::formatter, but because
// it's iterable, it prints: "foo = [1, 2, 3, 4]\n".
std::print("foo = {}\n", foo);
return 0;
}
Я использую MS vc ++ из Visual Studio 17.12.15 и компиляции с /std:c+latest.


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

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

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

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

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

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

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