Re[2]: Посчитать биты занимаемые числом.
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.05.03 20:46
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>Если предположить, что в приведенном примере один инкремент iBits++ лишний,


Нда. Копи-пэст . Я уже когда запостил, то заметил, что лажанулся. Но подумал, что на дело это не должно повлиять.

ПК>то код может быть таким:


ПК>
ПК>template<unsigned n>
ПК>struct NBits
ПК>{
ПК>  enum { value = NBits<(n >> 1)>::value + 1 };
ПК>};

ПК>template<>
ПК>struct NBits<0>
ПК>{
ПК>  enum { value = 0 };
ПК>};

ПК>unsigned iBits = NBits<sizeof(array) / sizeof(array[0])>::value;
ПК>


Бальшой сенкс!

Но я тебя еще помучаю...

А зачем нужна специализация? Ну, "NBits<0>"? Это борьба с кем-то или еще что?

И вообще, обясни принцип действия, а то я как-то не дотягиваю. Вроде все просто, но... А может к вечеру уже бошка не варит.

Кстати, сработало даже в managed-C++. Причем я даже не нашел следа от enum-а. Жаль, что в Шарпе так нельзя. Да и препроцессор они от туда зря выбрасели. Ну, да ладно. Сделают шаблоны, можно быдет такие же кренделя в рантайме отмачиать (надеюсь)...

ПК>Искомое константное выражение выделено жирным.


Ну, это и так ясно.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.