А зачем нужна специализация? Ну, "NBits<0>"? Это борьба с кем-то или еще что?
И вообще, обясни принцип действия, а то я как-то не дотягиваю. Вроде все просто, но... А может к вечеру уже бошка не варит.
Кстати, сработало даже в managed-C++. Причем я даже не нашел следа от enum-а. Жаль, что в Шарпе так нельзя. Да и препроцессор они от туда зря выбрасели. Ну, да ладно. Сделают шаблоны, можно быдет такие же кренделя в рантайме отмачиать (надеюсь)...
ПК>Искомое константное выражение выделено жирным.
Ну, это и так ясно.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Павел Кузнецов, Вы писали:
ПК>Если бы не было специализации NBits<0>, рекурсия бы не закончилась.
И все же в голове не укладывается почему вообще начинаются рекурсивные действия. Ты же вроде задаешь конкртное значение.
V> Кстати, сработало даже в managed-C++.
ПК>Прикольно
Погано то, что мой цикл, хотя он и полностью основан на константах, VC не вычислил во время компиляции. А я как раз пишу код который должен компилироваться как в managed-, так и в unmanaged-варианте. Ну, да ладно. Впредь будем пользоваться шаблонами.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, MaximE, Вы писали:
ME>Если нужно в runtime, то:
ME>
ME>floor(log2(n)) + 1;
ME>
Я уж тогда лучше циклом. Вычисления просто не соразмеримые выйдут. Да и мне нужно было именно константное решение. Заело просто, что компилятор не додумывается перевести такую фигню в константу.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Боюсь, в виду простоты вычислений в моем случае будет быстрее прогнать тупой цикл (вычисления то полевые). К тому же мне скорость если честно в данном случае не актульна. В программе производится 12 расчетов. Просто зачела неспрпведливость. Я понимаю, что вычисление ностантное (все параметры константы), а компилятор собака генерирует цикл (по кройней мере в менеджед-режиме).
В любом случае спасибо.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Павел Кузнецов, Вы писали:
ПК>>Если бы не было специализации NBits<0>, рекурсия бы не закончилась.
VD>И все же в голове не укладывается почему вообще начинаются рекурсивные действия. Ты же вроде задаешь конкртное значение.
Рекурсия при инстанциировании шаблона.
7. О чем невозможно говорить, о том следует молчать.
Здравствуйте, VladD2, Вы писали:
VD>Боюсь, в виду простоты вычислений в моем случае будет быстрее прогнать тупой цикл (вычисления то полевые). К тому же мне скорость если честно в данном случае не актульна. В программе производится 12 расчетов. Просто зачела неспрпведливость. Я понимаю, что вычисление ностантное (все параметры константы), а компилятор собака генерирует цикл (по кройней мере в менеджед-режиме).
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, MaximE, Вы писали:
ME>>Если нужно в runtime, то:
ME>>
ME>>floor(log2(n)) + 1;
ME>>
VD>Я уж тогда лучше циклом. Вычисления просто не соразмеримые выйдут. Да и мне нужно было именно константное решение. Заело просто, что компилятор не додумывается перевести такую фигню в константу.
Я всего лишь хотел сказать, что количество разрядов для представления числа N в системе исчисления с основанием R, есть 1 + округленный вниз до целого логарифм N по основанию R.
Здравствуйте, Кодт, Вы писали:
К>Зато у меня — голый Це. К>И его можно использовать и в run-time (в отличие от шаблонов), и в compile-time (в отличие от функций).