在类设计器中使用 C++ 代码其中模板类、结构、Enum、宏、Typedef

类设计器支持以下 C++ 代码元素 :

  • 模板类

  • 结构

  • Enum

  • 宏(显示宏的处理后视图)

  • Typedef

  • 模板类

    类设计器支持直观显示模板类 。 支持嵌套声明。 下表列出了一些典型声明。

    展开表

    Code 元素类设计器视图
    template <class T>

    class A {};
    A<T>

    模板类
    template <class T, class U>

    class A {};
    A<T, U>

    模板类
    template <class T, int i>

    class A {};
    A<T, i>

    模板类
    template <class T, template <class K> class U>

    class A {};
    A<T, U>

    模板类

    下表列出了一些分部专用化示例。

    展开表

    Code 元素类设计器视图
    template<class T, class U>

    class A {};
    A<T, U>

    模板类
    template<class T>

    class A<T, T> {};
    A<T, T>

    模板类
    template <class T>

    class A<T, int> {};
    A<T, int>

    模板类
    template <class T1, class T2>

    class A<T1*, T2*> {};
    A<T1*, T2*>

    模板类

    下表列出了一些分部专用化继承示例。

    展开表

    Code 元素类设计器视图
    template <class T, class U>

    class A {};

    template <class TC>

    class A<T, int> {};

    class B : A<int, float>

    {};

    class C : A<int, int>

    {};
    A<T, U>

    模板类

    B



    (指向类 A)

    C



    (指向类 A)

    下表列出了一些分部专用化模板函数示例。

    展开表

    Code 元素类设计器视图
    class A

    {

    template <class T, class U>

    void func(T a, U b);

    template <class T>

    void func(T a, int b);

    };
    A

    func<T, U>(+ 1 重载)
    template <class T1>

    class A {

    template <class T2>

    class B {};

    };

    template<> template<>

    class A<type>::B<type> {};
    A<T1>

    模板类

    B<T2>

    模板类

    (B 包含在类 A 中的“嵌套类型” 下)
    template <class T>

    class C {};

    class A : C<int> {};
    A



    -> C<int>

    C<T>

    模板类

    下表列出了一些模板继承示例。

    展开表

    Code 元素类设计器视图
    template <class T>

    class C {};

    template<>

    class C<int> {

    class B {};

    }

    class A : C<int>::B {};
    A



    ->B

    C<int>



    (B 包含在类 C 中的“嵌套类型” 下)

    C<T>

    模板类

    下表列出了一些规范专用化类连接示例。

    展开表

    Code 元素类设计器视图
    template <class T>

    class C {};

    template<>

    class C<int> {};

    class A : C<int> {};

    class D : C<float> {};
    A



    ->C<int>

    C<int>



    C<T>

    模板类

    D



    ->C<float>
    class B {

    template <class T>

    T min (const T &a, const T &b);

    };
    B

    min <T>

    类设计器中的 C++ 枚举

    类设计器支持 C++ enum 和域化的 enum class 类型。 下面是一个示例:

    C++复制

    enum CardSuit {
       Diamonds = 1,
       Hearts = 2,
       Clubs = 3,
       Spades = 4
    };
    
    // or...
    enum class CardSuit {
       Diamonds = 1,
       Hearts = 2,
       Clubs = 3,
       Spades = 4
    };
    

    类图中的 C++ 枚举形状的外观和工作原理与结构形状类似,只不过其标签显示为 Enum 或 Enum class,标签的颜色为粉色而不是蓝色,并且具有带颜色的边框左边和上边。 两种枚举形状和结构形状都具有方角。

    有关使用 enum 类型的更多信息,请参阅枚举

    类设计器中的 C++ Typedef

    Typedef 语句可在某个名称和其基础类型之间创建一个或多个间接层。 “类设计器”支持使用关键字 typedef 声明的 C++ typedef 类型,例如:

    C++复制

    typedef class coord
    {
       void P(x,y);
       unsigned x;
       unsigned y;
    } COORD;
    

    然后你可以使用此类型来声明实例:

    COORD OriginPoint;

    类和结构形状

    在“类设计器”中,C++ typedef 具有 typedef 中所指定类型的形状。 如果源声明 typedef class,则形状具有圆角和标签“类”。 对于 typedef struct,形状具有方角和标签 Struct

    类和结构可在自身内声明嵌套的 typedef。 在“类设计器”中,类和结构形状可将嵌套的 typedef 声明显示为嵌套的形状。

    Typedef 形状支持右键单击菜单(关联菜单)中的“显示为关联”和“显示为集合关联”命令。

    类 typedef 示例

    C++复制

    class B {};
    typedef B MyB;
    

    C++ class typedef in Class Designer

    结构 typedef 示例

    C++复制

    typedef struct mystructtag
    {
        int   i;
        double f;
    } mystruct;
    

    C++ struct typedef in Class Designer

    未命名的 typedef

    虽然可以声明没有名称的 typedef,但“类设计器”不会使用指定的标记名称。 “类设计器”使用“类视图”生成的名称。 例如,以下声明有效,但它在类视图和类设计器中显示为名为 __unnamed 的对象 :

    C++复制

    typedef class coord
    {
       void P(x,y);
       unsigned x;
       unsigned y;
    };
    

     备注

    “类设计器”不显示其源类型为函数指针的 typedef。

  • 27
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值