Документ взят из кэша поисковой машины. Адрес оригинального документа : http://www.snto-msu.net/showflat.php?Number=3750938&src=arc&showlite=
Дата изменения: Unknown
Дата индексирования: Wed Apr 13 12:04:09 2016
Кодировка: Windows-1251
как вычислить некоторое зн. в шаблоне во время компиляции в C++ - Public forum of MSU united student networks
Root | Google | Yandex | Mail.ru | Kommersant | Afisha | LAN Support
  
Technical >> Development (Archive)

Страницы: 1
BlackCode

Рег.: 25.11.2005
Сообщений: 131
Из: Moscow, Russia
Рейтинг: 0
  как вычислить некоторое зн. в шаблоне во время компиляции в C++
      28.11.2005 01:21
 

Здрасте

даны
bitSize - тоесть размер массива в битах
как я могу вычислить
dwSize - размер в 4 байтовых блоках
во время компиляции

dwSize = bitSize/32;

if( bitSize%32 ){ dwSize++; }

?

конкретней

у меня есть класс Register с первоначальным видом

code:

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.





Редактировал BlackCode (28.11.2005 01:28)
never get enough
- - - -
Regards, Aram
ruel
scientist

Рег.: 21.12.2004
Сообщений: 1011
Рейтинг: 0
  Re: как вычислить некоторое зн. в шаблоне во время компиляции в C++ [re: BlackCode]
      28.11.2005 01:55
 

Quote:


даны
bitSize - тоесть размер массива в битах
как я могу вычислить
dwSize - размер в 4 байтовых блоках
во время компиляции

dwSize = bitSize/32;

if( bitSize%32 ){ dwSize++; }

?




если bitSize - константа времени компиляции, то очевидно так:

  ((bitSize+31)/32)



(1) прочтите до конца, (2) обдумайте прочитанное, (3) отвечайте по существу
PropellerMan
I'm in space

Рег.: 06.02.2003
Сообщений: 20406
Рейтинг: 2939
  Re: как вычислить некоторое зн. в шаблоне во время компиляции в C++ [re: BlackCode]
      28.11.2005 01:55
 

code:

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



ruel
scientist

Рег.: 21.12.2004
Сообщений: 1011
Рейтинг: 0
  Re: как вычислить некоторое зн. в шаблоне во время компиляции в C++ [re: PropellerMan]
      28.11.2005 01:59
 

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



(1) прочтите до конца, (2) обдумайте прочитанное, (3) отвечайте по существу
PropellerMan
I'm in space

Рег.: 06.02.2003
Сообщений: 20406
Рейтинг: 2939
  Re: как вычислить некоторое зн. в шаблоне во время компиляции в C++ [re: ruel]
      28.11.2005 02:00
 

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

ruel
scientist

Рег.: 21.12.2004
Сообщений: 1011
Рейтинг: 0
  Re: как вычислить некоторое зн. в шаблоне во время компиляции в C++ [re: PropellerMan]
      28.11.2005 02:04
 

Quote:


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



ясное дело

но все равно мое выражение красивее



(1) прочтите до конца, (2) обдумайте прочитанное, (3) отвечайте по существу
BlackCode

Рег.: 25.11.2005
Сообщений: 131
Из: Moscow, Russia
Рейтинг: 0
  Re: как вычислить некоторое зн. в шаблоне во время компиляции в C++ [re: ruel]
      28.11.2005 03:53
 

спасибо ребята

предпочитаю

template <int bitCount, int dwSize = (bitCount + 31) / 32> class Register



never get enough
- - - -
Regards, Aram
BlackCode

Рег.: 25.11.2005
Сообщений: 131
Из: Moscow, Russia
Рейтинг: 0
  Re: как вычислить некоторое зн. в шаблоне во время компиляции в C++ [re: BlackCode]
      28.11.2005 13:29
 

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

code:

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

....

};






never get enough
- - - -
Regards, Aram
Druxa
Дрюха

Рег.: 27.06.2003
Сообщений: 2722
Из: Троицк
Рейтинг: 1974
  Re: как вычислить некоторое зн. в шаблоне во время компиляции в C++ [re: BlackCode]
      29.11.2005 22:36
 


 
Quote:

(bitCount + 31) / 32


А факториал вычислить слабо?



нет, я не богат... я сказочно не богат... но я и не умен...
DarkGrayМодератор
Carpal Tunnel

Рег.: 30.09.2002
Сообщений: 31421
Рейтинг: 8953
  Re: как вычислить некоторое зн. в шаблоне во время компиляции в C++ [re: Druxa]
      29.11.2005 22:38
 

> А факториал вычислить слабо?

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

Druxa
Дрюха

Рег.: 27.06.2003
Сообщений: 2722
Из: Троицк
Рейтинг: 1974
  Re: как вычислить некоторое зн. в шаблоне во время компиляции в C++ [re: DarkGray]
      29.11.2005 23:07
 

Quote:

одна из стандартных задачек


Ну вот я ее и задал Если у них тут дюжина постов про "(bitCount + 31) / 32", то наверное будет полезно...



нет, я не богат... я сказочно не богат... но я и не умен...
Страницы: 1

Technical >> Development (Archive)

Дополнительная информация
1 зарегистрированных и 1 анонимных пользователей просматривают этот форум.

Модераторы:  DarkGray 

Печать темы

Права
      Вы можете создавать новые темы
      Вы можете отвечать на сообщения
      HTML отключен
      UBBCode включен

Рейтинг:
Просмотров темы:

Переход в