Bagikan melalui


Kelas ref templat (C++/CX)

Templat C++ tidak diterbitkan ke metadata dan oleh karena itu tidak dapat memiliki aksesibilitas publik atau terlindungi dalam program Anda. Tentu saja, Anda dapat menggunakan templat C++ standar secara internal dalam program Anda. Selain itu, Anda dapat menentukan kelas ref privat sebagai templat dan Anda dapat mendeklarasikan kelas ref templat khusus secara eksplisit sebagai anggota privat di kelas ref publik.

Menulis templat kelas ref

Contoh berikut menunjukkan cara mendeklarasikan kelas ref privat sebagai templat, dan juga cara mendeklarasikan templat C++ standar dan cara mendeklarasikannya sebagai anggota di kelas ref publik. Perhatikan bahwa templat C++ standar dapat dikhususkan oleh jenis Windows Runtime, dalam hal ini 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;
    };
}

Baca juga

Sistem Tipe (C++/CX)
Referensi Bahasa C++/CX
Referensi Namespace