这个类定义风格的优点/缺点是什么?

时间:2010-11-15 06:43:31

标签: c++ typedef

我已多次看到以下样式类定义。这种风格的优缺点究竟是什么?

typedef class _MyClass
{
public :
  _MyClass();
} MyClass;

3 个答案:

答案 0 :(得分:3)

在C ++中很少见,但在C中很常见(其中struct Foo不会自动别名为Foo。)您可能会在具有不同平台的不同平台的库中看到它(例如, “Canvas”类,它是特定于实现的。)该库将使用typedef让其用户简化其代码:

#if WINDOWS
    typedef class WindowsCanvas {
        private: HWND handle;
    } Canvas;
#elif MAC
    typedef class MacCanvas {
        private: CGContextRef context;
    } Canvas;
#endif

在这样的示例中,只需要使用Canvas类型,而不是特定于平台的类型。

答案 1 :(得分:2)

在C ++中没有专业人士。这种风格来自C,你不能只使用结构的名称作为一种类型。 E.g。

struct X
{
   int x;
};

X a; //compiler error
struct X b; //OK

为了避免在C中使用精心设计的类型说明符,如struct X aenum E e;等,通常的做法是输入名称。 E.G。

typedef struct X_ { ... } X;

现在X a;也可以。

当然,在C ++中没有必要这样做。

答案 2 :(得分:2)

一个非常人为的例子说明了一个可能的优势,但是既然标准说明了这一点,它必定具有肯定的含义。

  

$ 7.1.3 / 6-“同样,在给定的   范围,类别或枚举   不得与...同名   一个在其中声明的typedef-name   该范围并指其他类型   比类或枚举本身。   [

typedef struct S{} MYS;

int MYS;                     // Error due to $7.1.3/6

struct A{};

int A;                       // No error, subsequent use required fully elaborated name

int main(){}