как вычислить некоторое зн. в шаблоне во время компиляции в C++

kentavr

Здрасте
даны
bitSize - тоесть размер массива в битах
как я могу вычислить
dwSize - размер в 4 байтовых блоках
во время компиляции
dwSize = bitSize/32;
if( bitSize%32 ){ dwSize++; }
?
конкретней
у меня есть класс Register с первоначальным видом

template <int dwSize,int bitCount> class Register
{
private:
// HEX constants array
static const unsigned __int32 mask[];
unsigned __int32 _register[ dwSize ];
public:
Register{}
Register(__int32 initValue){ for(int i=0;i<dwSize;i++){_register[i] = initValue;} }
// WARNING! you must check yourself for a validness of an arguments before member function call!
BOOL GetBit(UINT);
void Set1(UINT);
void Set0(UINT);
void Set0FromTo(UINT,UINT); // second argument must be greater than first
void Set1FromTo(UINT,UINT); // second argument must be greater than first
void Replace(UINT,UINT);
__int32 GetDW(UINT) const;
void operator >> (unsigned int);
void operator << (unsigned int);
void RCL(unsigned int);
void RCR(unsigned int);
};

как я могу вычислить значение dwSize во время компиляции, чтобы в место одного параметра шаблону передавать один параметр. Тоесть передовать только bitCount.

mira-bella

даны
bitSize - тоесть размер массива в битах
как я могу вычислить
dwSize - размер в 4 байтовых блоках
во время компиляции
dwSize = bitSize/32;
if( bitSize%32 ){ dwSize++; }
?
если bitSize - константа времени компиляции, то очевидно так:
bitSize+31)/32)

okunek

 

template <int bitCount, int dwSize=bitCount/32+bitCount%32?1:0> class Register
  

mira-bella

а ничего, что приоритет "a+b" больше чем приоритет "c?a:b" ?

okunek

ну скобки поставить, делов-то

mira-bella

ну скобки поставить, делов-то
ясное дело
но все равно мое выражение красивее

kentavr

спасибо ребята
предпочитаю
template <int bitCount, int dwSize = (bitCount + 31) / 32> class Register

kentavr

А вообще тут dwSize как параметр явно лишний, лучше так

template <int bitCount> class Register
{
private:
enum{dwSize = (bitCount + 31) / 32};
....
};

rosali

(bitCount + 31) / 32
А факториал вычислить слабо?

Dasar

> А факториал вычислить слабо?
а в чем проблема?
одна из стандартных задачек решаемая людьми дорвавшихся до C++-шаблонов

rosali

одна из стандартных задачек
Ну вот я ее и задал Если у них тут дюжина постов про "(bitCount + 31) / 32", то наверное будет полезно...
Оставить комментарий
Имя или ник:
Комментарий: