четверг, 25 ноября 2010 г.

strong typedef

Известно, что typedef не создает новый тип, а просто вводит алиас для существующего типа. Т.е., например, объявив
typedef int myint_t;
нельзя перегрузить функцию для myint_t, так как типы неразличимы для компилятора:
void f( int );
void f( myint_t ); // error
Если мы хотим эти типы различать, то решение состоит в том, чтобы создать структуру myint_t вместо typedef и перегрузить все необходимые операции, а также оператор приведения типа. В библиотеке Boost уже есть обертка для такой задачи — strong_typedef, что избавляет от необходимости писать её самим.

2 комментария:

  1. если это класс с методами, то неудобно, потом их вызывать

    ОтветитьУдалить
  2. Их не нужно вызвать. Они нужны, чтобы класс вел себя как будто это исходный тип.

    ОтветитьУдалить