5


0

C ++空のクラスまたはtypedef

私は現在、私のコードでそのようなものを使用しています:

class B : public A { };

typedefを使用する方が良いと思いませんか?

typedef A B;

7 Answer


16


場合によります。 「A」と「B」を別個だが関連するタイプにしたい場合、「B」は「A」を拡張する必要があります。 それらを同一にしたい場合は、「typedef」を使用する必要があります。 これ以上のコンテキストを提供できますか?


4


それはあなたが望むものによります。 異なるクラスを使用してテンプレートメタプログラミングをカスタマイズする場合は、 `B`を作成することをお勧めします。

タイピングを減らすためだけに継承を使用するのは適切な解決策ではなく、 `typedef`を使用する必要がある場合は、そのために導入されました。


2


間違いなく、既存のデータ型に新しい名前を付けることが目的の場合は、typedefを使用します。


2


まったく同じではありません。 たとえば、typedefを使用すると、次のことができます。

typedef A B;
func(B param) {...}
...
A var;
func(var);


1


さて、空のクラスを使用して `A`を繰り返し入力するのをやめていると思います。 その場合、typedefの方が良いと思います。 少なくとも、それが最も頻繁に行われる方法のようです。

これは私の意見です。 一般的にtypedefを使用することについて、人々はまったく同意していません。 この場合は大丈夫だと思いますが。

Jon Purdyの答えを読んだ後、Aを拡張する必要があり、そうでない場合は継承を使用する必要があることを付け加えます。


1


あなたが望むものに応じて、効果は同じではありません。

C ++のtypedefは「強力」ではありません。つまり、基本的には B`と A`は同じ型になります。 2つを区別できるようにするには、クラスを使用します。

たとえば、http://www.boost.org/doc/libs/1_41_0/boost/strong_typedef.hpp [ブースト1]など、強力なtypedefのさまざまな実装がWeb上で見られます。


0


完全を期すために、別のポイントを追加します。

class B : public A { };

Bを簡単に宣言できます。

class B;
void func(B param);