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