Re: double_uint_t<Type>, half_uint_t<Type>
От: Chorkov Россия  
Дата: 10.10.19 15:06
Оценка:
Здравствуйте, 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;
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.