クラス型を指定した typedef の使用
クラス型を持つ typedef 指定子の使用がサポートされているのは、主に、typedef 宣言内で名前のない構造体を宣言する ANSI C に対応するためです。 たとえば、多くの C プログラマは次のように記述します。
// typedef_with_class_types1.cpp
// compile with: /c
typedef struct { // Declare an unnamed structure and give it the
// typedef name POINT.
unsigned x;
unsigned y;
} POINT;
このような宣言の利点は、次のような宣言を使用できることです。
POINT ptOrigin;
次のように記述する必要がありません。
struct point_t ptOrigin;
C++ では、typedef 名と実際の型 (class、struct、union、および enum のキーワードで宣言) との違いがより明確です。 typedef ステートメント内で無名の構造体を宣言する C 言語の記述法も使用できますが、C 言語に見られる表記の利点は得られません。
// typedef_with_class_types2.cpp
// compile with: /c /W1
typedef struct {
int POINT();
unsigned x;
unsigned y;
} POINT;
前の例では、名前のないクラス typedef 構文を使用して、POINT という名前のクラスを宣言しています。 POINT はクラス名として扱われますが、この方法で導入された名前には次の制限が適用されます。
class、struct、または union プレフィックスの後には名前 (シノニム) を記述できません。
名前は、クラス宣言内のコンストラクター名またはデストラクター名として使用できません。
つまり、この構文には、継承、構築、または破棄のための機能はありません。