什么是“标准C ++类型”和“C ++ / CX结构”?

时间:2012-09-20 23:56:30

标签: microsoft-metro windows-runtime c++-cx

如果这是一个愚蠢的问题,请耐心等待,因为我最近开始学习C ++ / CX。我正在浏览value classesref classes上的MSDN文档,我遇到了这些例外情况:

  

因为值类或值结构的所有成员都是公共的并且被发送到元数据中,所以不允许使用标准C ++类型。

  

[ref class]可以包含作为成员的C ++ / CX构造或标量类型,例如enum class,ref class,float64等。它还可能包含标准C ++类型。 C ++ / CX构造可以具有公共,受保护,内部,私有或受保护的私有可访问性。公共或受保护的成员被发送到元数据。标准C ++类型必须具有私有,内部或受保护的私有可访问性,这可以防止它们被发送到元数据。


我的问题是:“C ++ / CX构造”和“标准C ++类型”的定义是什么?

如果我的猜测是正确的,C ++ / CX构造包括ref类和结构以及枚举类和结构,标准C ++类型包括int,bool,float,double等。是吗?

1 个答案:

答案 0 :(得分:3)

当文档说“C ++ / CX构造”时,它意味着Windows运行时类型。使用C ++ / CX进行编程时,有两类类型:

  1. C ++类型:C ++类型集包括您可以在普通C ++代码中使用的所有类型:基本类型(如intdouble ),枚举,指针,引用,类类型等

  2. Windows运行时类型:这些类型可以跨Windows运行时ABI边界使用。这些包括引用类型(ref class),Windows运行时值类型(value class,数字类型,Windows运行时枚举等)和委托。

  3. 请注意,这些类别之间存在一些重叠:数字类型同时存在。

    您可以在代码中的任何位置使用C ++类型,但除了您编写的任何公共组件的公共表面外。只能在Windows运行时ABI边界使用Windows运行时类型。例如:

    public ref class C sealed 
    {
    public:
    
        // Ok:  int is a fundamental WinRT type
        void F(int x) { } 
    
        // Not ok:  std::string is not a WinRT type
        void G(std::string s) { } 
    
    private:
    
        // Ok:  _s is private; private members are implementation details, so you
        // may use ordinary C++ types for private members.
        std::string _s; 
    };
    

    这两类类型并不是在C ++中构建Windows运行时组件所特有的:如果在.NET中构建组件,则可以使用特定于.NET的类型(例如,具体的泛型类型)和特定于.NET的构造(例如,通用方法),它们不是有效的Windows运行时类型。