Tôi có lớp sau trong C++/CLI và một mẫu instantiation rõ ràng cho int nguyên thủy ..Sử dụng C++ CLI mẫu lớp trong C#
template<typename T>
public ref class Number
{
T _value;
public:
static property T MinValue
{
T get()
{
return T::MinValue;
}
}
static property T MaxValue
{
T get()
{
return T::MaxValue;
}
}
property T Value
{
T get()
{
return _value;
}
void set(T value)
{
if(value<MinValue || value > MaxValue)
throw gcnew System::ArgumentException("Value out of range");
_value = value;
}
}
};
template ref class Number<int>;
On biên dịch này và kiểm tra việc tạo lắp ráp sử dụng phản xạ tôi có thể để xem một lớp được gọi là Number<int>
nhưng trong khi cố gắng để khởi tạo cùng một lớp này trong C# trình biên dịch phàn nàn về một số lớp System::Number
không tham gia một đối số mẫu. Tôi đang làm gì sai? Điều này có thể được thực hiện ở tất cả?
Đáng buồn thay, việc tạo các kiểu generic đánh bại toàn bộ mục đích của việc sử dụng C++/CLI vì C# có thể thực hiện tương tự và không hiệu quả như nhau. –
Sau đó, nó có vẻ như câu trả lời bạn đăng là cách duy nhất để đi (mặc dù phần nào đánh bại mục đích của việc sử dụng các mẫu, quá). Như @JaredPar đã nói, các mẫu không giống như generics, và chỉ C++ có thể sử dụng các mẫu. – Andy