模板 ref 类 (C++/CX)

C++ 模板没有发布到元数据,因此你的程序中不能具有公共或受保护的可访问性。 当然,你可在程序内部使用标准 C++ 模板。 此外,你可将私有 ref 类定义为模板,并可将显式专用模板 ref 类声明为公共 ref 类中的私有成员。

创作 ref 类模板

下面的示例演示如何将私有 ref 类声明为模板,如何声明标准 C++ 模板,以及如何将二者同时声明为公共 ref 类中的成员。 请注意,标准 C++ 模板可通过 Windows 运行时类型进行专用化,在此示例中为 Platform::String^。

namespace TemplateDemo
{
    // A private ref class template
    template <typename T>
    ref class MyRefTemplate
    {
    internal:
        MyRefTemplate(T d) : data(d){}
    public:
        T Get(){ return data; }
    private:
        T data;
    };

    // Specialization of ref class template
    template<>
    ref class MyRefTemplate<Platform::String^>
    {
    internal:
        //...
    };

    // A private derived ref class that inherits
    // from a ref class template specialization
    ref class MyDerivedSpecialized sealed : public MyRefTemplate<int>
    {
    internal:
        MyDerivedSpecialized() : MyRefTemplate<int>(5){}
    };

    // A private derived template ref class 
    // that inherits from a ref class template
    template <typename T>
    ref class MyDerived : public MyRefTemplate<T>
    {
    internal:
        MyDerived(){}
    };

    // A standard C++ template
    template <typename T>
    class MyStandardTemplate
    {
    public:
        MyStandardTemplate(){}
        T Get() { return data; }
    private:
        T data;

    };

    // A public ref class with private 
    // members that are specializations of
    // ref class templates and standard C++ templates.
    public ref class MySpecializeBoth sealed
    {
    public:
        MySpecializeBoth(){}
    private:
        MyDerivedSpecialized^ g;
        MyStandardTemplate<Platform::String^>* n;
    };
}

另请参阅

类型系统 (C++/CX)
C++/CX 语言参考
命名空间参考