web-dev-qa-db-ja.com

C ++ typedefクラスの使用

typedef class {} Nameを使用する理由

私はこれを IBM C++ doc で学びました。ここで使用するヒントはありません。

13
kiriloff

これは「C」言語からの二日酔いです。

Cでは、

struct Pt { int x; int y; };

次に、この構造体の変数を宣言するには、次のようにする必要があります

struct Pt p;

TypedefはCでこれを回避するのに役立ちました

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

今できる

Pt p;

cで.

C++では、これは決して必要ではありませんでした。

class Pt { int x; int y; };

あなたがすることを許可しました

Pt p;

C. OTOHの場合のように、C++には表記上の利点はありません。この構文は構築や破棄のメカニズムを提供しないため、制限につながります。

つまり、コンストラクタまたはデストラクタで名前typedef名を使用することはできません。

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

Ptと呼ばれるコンストラクターやデストラクターを持つことはできません。つまり、本質的には、ほとんどの場合、C++でこれを行うべきではありません。

26
user93353

この回答は、{}だけでなく、クラスに興味深いコンテンツがあることを前提としています。

C++では、クラスと同じ名前の関数を使用できますが(Cとの互換性のため)、ほとんどの場合、そうしたくありません。

Typedefと同じ名前の関数を使用することはできないため、これを行うことにより、不適切な名前の選択から保護されます。ほとんど誰も気にしない、そしてあなたが気になるつもりなら、おそらくそれを書くでしょう:

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

あなたが実際に参照しているコードが書かれているとおりである場合(リンクをたどってもコードが表示されない)、それはclass Name {};のようになります(これは書くのが難しいので、なぜ空のクラスを呼び出すのでしょうか) Name?)、ただし上記の考慮事項に合わせて変更。

3
Steve Jessop