typedef
использование необработанных указателей бессмысленно (ха!). Это не дает никакой реальной абстракции (потребители все равно должны понимать, что типы являются указателями, и они должны выяснить, как анализировать любое соглашение об именах, которое вы используете для typename, чтобы определить, какой тип является pointee).
Это также плохая форма, потому что если у вас есть:
typedef T* T_ptr;
Тогда const T* foo
и const T_ptr bar
- две совершенно разные вещи. (foo
- это указатель на const T
; это обещание не изменять объект через этот указатель. bar
- это сам указатель const
; его нельзя изменить, чтобы он указывал на что-то другое. )
Первый случай (указатель на const
) важен: он помогает обеспечить выполнение контрактов функций.
Второй случай гораздо, гораздо менее полезен.
Поэтому, если бы вы добавили typedef
для типа указателя, чтобы быть полезным, вам нужно создать два:
typedef T* T_ptr;
typedef const T* const_T_ptr;
Допустимое исключение в C ++, когда у вас есть классы интеллектуальных указателей. В этих случаях ввод boost::shared_ptr<T>
может быть достаточно утомительным, так как создание typedef
для этого является разумным удобством.