Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Typedef

8.1K
19 сентября 2004 года
kard
6 / / 19.09.2004
как создать свой тип данных, например unsigned mytype (int от 0 до 64)
527
19 сентября 2004 года
pavor
275 / / 28.09.2003
Цитата:
Originally posted by kard
как создать свой тип данных, например unsigned mytype (int от 0 до 64)



В смысле зафиксировать пределы.
Можно обявить свой класс и определить основные операторы, в которых можно отслеживать значения.

6.3K
21 сентября 2004 года
Denri
43 / / 12.08.2004
Цитата:
Originally posted by kard
как создать свой тип данных, например unsigned mytype (int от 0 до 64)



Цитата:

typedef struct {
unsigned a: 6;
} uint6;

void f(void){
uint6 i;
i.a = 17;
}



Здесь поле a структуры uint6 - 6-битное, т.е. имеет диапазон значений от 0 до 63. (63 + 1 = 0!)

3
21 сентября 2004 года
Green
4.8K / / 20.01.2000
Denri, видимо, пишет на С, судя по использованию typedef и struct.

Если пишешь на С++, а не на С, то удобнее объявить класс и определить основные операторы, как уже сказал pavor. Тогда можно будет обращаться с переменной такого типа, как с обычными переменными, а не как с полем структуры.

Если нужно разнообразие нестандартных типов, то можно ввести шаблонный класс, что-то типа:

Код:
template<size_t TSize, typename TBase=unsigned>
class CBin
{
protected:
  TBase val : TSize;

public:
    CBin() :val(0) {}
    CBin(const CBin6& arg) :val(arg.val) {}
    CBin(const TBase& arg) :val(arg) {}

    operator TBase() const { return val; }

    const CBin& operator ++() { val++; return *this; }
    const CBin& operator --() { val--; return *this; }

    const CBin& operator =(const uint6& arg)  { val = arg.val;  return *this; }
    const CBin& operator *=(const uint6& arg) { val *= arg.val; return *this; }
    ..............................
    // и т.для остальных операторов
};

// Использование:
typedef CBin<24>     uint24;
typedef CBin<6,char> uint6;

uint6 a, b;
a = 17;
b = a++;
uint6 c = a + b;


Возможно, подобный шаблонный класс уже описан в какой-либо общеизвестной библиотеке (STL, Boost и т.п.).
8.1K
21 сентября 2004 года
kard
6 / / 19.09.2004
большое спасибо за помощь
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог