Я бы хотел (1) объявить целое число без знака, которое имеет тот же размер, что и заданное имя или тип данного выражения, и (2) предоставить преобразование типа для этого типа, который просто проходит битформат аргумента не изменился. (Даже в случае прохождения поплавка, скажем, мне нужно, чтобы он преобразовывался в правильную ширину, которая точно сохраняет битпаттер.)D сохраняющая константа (DLang)
Как я должен иметь дело с сохранением константы типа без изменений, в обоих случаях , не отказываясь от const или неизменяемого?
Вот моя частичная попытка:
template TUint_t(alias T)
{
static if (T.sizeof * 8 == 64)
alias TUint_t = uint64_t;
else static if (T.sizeof * 8 == 32)
alias TUint_t = uint32_t;
else static if (T.sizeof * 8 == 16)
alias TUint_t = uint16_t;
else static if (T.sizeof * 8 == 8)
alias TUint_t = uint8_t;
else static assert (false);
}
auto ConvertToBitPattern(T)(inout T x)
{
return * cast(TUint_t!(T) *) &x;
}
много спасибо за ваш великолепно полезный и быстрый ответ! –