Здравствуйте, Videoman, Вы писали:
V>Рад приветствовать всех гуру С++, кто готов помочь со следующим вопросом: сейчас в одной подсистеме нашей библиотеки активно понадобилось создавать типы в два раза большие и в два раза меньшие, по количеству бит, типа:
V>V>uint32_t -> uint64_t или uint32_t -> uint_16 // и т.д.
V>Сейчас это сделал с помощью самописанных type traits, ничего сложного:
V>V>// Дальше используется как-то так:
V>double_uint_t<uint32_t> a; // а будет 64-х битным
V>half_uint_t<uint32_t> b; // b будет 16-и битным
V>
V>Но вот задумался, а не подвезли ли уже в С++17 что-то готовое. Просто не хочется использовать велосипед который уже есть в стандарте или не нужен по причине того что нужный функционал достигается гораздо проще. Кто что посоветует?
В 17-м — нет. Но подходящие запчасти есть boost (boost::uint_t) :
https://www.boost.org/doc/libs/1_67_0/libs/integer/doc/html/boost_integer/integer.html
template< typename T> typedef typename boost::uint_t< std::numeric_limits<T>::digits * 2 >::exact double_uint_t;
template< typename T> typedef typename boost::uint_t< std::numeric_limits<T>::digits / 2 >::exact half_uint_t;