Partilhar via


Classes ref de modelo (C++/CX)

Os modelos C++ não são publicados em metadados e, portanto, não podem ter acessibilidade pública ou protegida em seu programa. Você pode, é claro, usar modelos C++ padrão internamente em seu programa. Além disso, você pode definir uma classe ref privada como um modelo e pode declarar uma classe ref de modelo explicitamente especializada como um membro privado em uma classe ref pública.

Criação de modelos de classe ref

O exemplo a seguir mostra como declarar uma classe ref privada como um modelo, e também como declarar um modelo C++ padrão e como declará-los ambos como membros em uma classe ref pública. Observe que o modelo C++ padrão pode ser especializado por um tipo de Tempo de Execução do Windows, neste caso um 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;
    };
}

Ver também

Tipo de Sistema (C++/CX)
Referência da linguagem C++/CX
Referência de namespaces