Aracılığıyla paylaş


Şablon Başvuru Sınıfları (C++/CX)

C++ şablonları meta verilerde yayımlanmaz ve bu nedenle programınızda genel veya korumalı erişilebilirliği olamaz. Elbette programınızda standart C++ şablonlarını dahili olarak kullanabilirsiniz. Buna ek olarak, özel bir başvuru sınıfını şablon olarak tanımlayabilir ve açıkça özelleştirilmiş bir şablon başvuru sınıfını genel başvuru sınıfında özel üye olarak bildirebilirsiniz.

Başvuru sınıfı şablonları yazma

Aşağıdaki örnek, özel bir başvuru sınıfını şablon olarak bildirmeyi ve ayrıca standart bir C++ şablonunu bildirmeyi ve her ikisini de genel başvuru sınıfında üye olarak bildirmeyi gösterir. Standart C++ şablonunun Windows Çalışma Zamanı türüne göre (bu örnekte Platform::String^) özelleştirilebilir.

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;
    };
}

Ayrıca bkz.

Tür Sistemi (C++/CX)
C++/CX Dil Başvurusu
Ad Alanları Başvurusu