Порядок следования байтов std::basic_ios

zhuebok
zhuebok

Предлагаю добавить возможность установки порядка следобания байтов для std::ios_base. Неплохо было бы, конечно же, сделать возможность применения в качестве флага порядка байтов шаблонного параметра чем-то вроде такого (особо не думал по этому поводу, конечно же, не хватает методов для перехода из одного порядка следования байт в другой). 

namespace std {

enum byte_order {
  native = ?,
  little_endian = 1,
  big_endian = 2,
  ...
};

template<byte_order ByteOrder>
class byte_order_traits;

template<>
class byte_order_traits<little_endian> {
public:
  template<typename T>
  constexpr static T convert_from_system(T &&value);

  template<typename T>
  constexpr static T convert_to_system(T &&value);
  ...
};

...
}

И соответственно, добавить дополнительный шаблонный параметр для std::basic_ios:

template<typename CharType, typename Traits = char_traits<CharType>, typename ByteOrderTraits = byte_order_traits<system_byte_order>>
class basic_ios : public std::ios_base;

Конечно же, можно использовать Boost.Endian, однако хотелось бы такой поддержки из коробки.

-3
рейтинг
2 комментария
yndx-antoshkka
Не надо навинчивать дополнительный функционал на std::ios_base - комитет на это никогда не согласится и это гарантировано поломает ABI.

Лучше попробуйте сформулировать вашу идею в виде новых функций/классов для стандартной библиотеки.
yndx-antoshkka
Сергей Садовников
В таком виде предложение выглядит каким-то странным. ios_base не занимается сериализацией данных и (вроде) по задумке не должна. Блобы на входе, блобы на выходе, а что это за блобы - решает клиент.
Сергей Садовников
Другие идеи
Группа создана, чтобы собирать предложения к стандарту C++, организовывать их внутренние обсуждения, помогать готовить их для отправки в комитет и защищать на общих собраниях в рабочей группе по С++ Международной организации по стандартизации (ISO).