Использование класса typedef С++

Зачем использовать typedef class {} Name?

Я узнал об этом в IBM С++ doc, но не намек на использование здесь.

Ответ 1

Это похмелье с языка "C".

В C, если у вас есть

struct Pt { int x; int y; };

чтобы объявить переменную этой структуры, вам нужно сделать

struct Pt p;

typedef помог вам избежать этого в C

typedef struct { int x; int y; } Pt;

Теперь вы можете сделать

Pt p;

в C.

В С++ это никогда не было необходимо, потому что

class Pt { int x; int y; };

позволяет вам выполнять

Pt p;

Он не дает никаких заметных преимуществ в С++, как это происходит в C. OTOH, это приводит к ограничениям, потому что этот синтаксис не предоставляет никакого механизма для построения или уничтожения.

то есть. вы не можете использовать имя typedef name в конструкторе или деструкторе.

typedef class { int x; int y; } Pt;

У вас не может быть конструктора Pt и деструктора. Поэтому, по существу, большую часть времени вы не должны делать этого на С++.

Ответ 2

В этом ответе предполагается, что в классе есть интересное содержимое, а не только {}.

В С++ у вас может быть функция с тем же именем, что и класс (для совместимости с C), но вы почти никогда не захотите.

У вас не может быть функции с тем же именем, что и typedef, поэтому это защищает вас от неправильного выбора имен. Почти никто не беспокоится, и даже если вы собираетесь беспокоиться, вы, вероятно, напишете его:

class Name {};
typedef Name Name; // reserve the name

Если код, на который вы ссылаетесь, действительно написан как написанный (я не вижу его, следуя вашей ссылке), то он скорее похож на class Name {}; (что является особенным для написания, почему вы бы назвали пустой класс Name?), но модифицированный для вышеупомянутого рассмотрения.