in Uncategorized

typedef bits

Наскоро докато ровех из нета срещнах идеята за user defined literal _bits, а днес ми остана време да го напиша.
В общи линии, идеята е safe & fast обръщане на двоично число в десетично, например на 11000100 в 196, без намесата на програмист.
Ето и въпросния код.

С този оператор, можем да пишем неща като int i = 1000_bits; и i ще има стойност 8.
Става compile time, прави проверки за валидност, намалява възможноста за някои грешки, а и се чете лесно :).

Write a Comment

Comment


*

  1. Може да си спестиш малко повтаряне на логика, ако base case-ът ти е празен стринг:

    template struct little_endian_to_uint;

    template
    struct little_endian_to_uint {
    static_assert(head >= ‘0’ && head <='1', "Invalid bits in operator\"\"_bits little_endian_to_uint”);

    const static uint64 value = (1 << sizeof…(tail)) * (head – '0') +
    (little_endian_to_uint::value);
    };

    template
    struct little_endian_to_uint {
    const static uint64_t value = 0;
    };