Nhìn vào bài viết này ở đây các tài liệu tham khảo để generics vào hàng cuối cùng xác định rằng Generics được sử dụng trong C++/CX với giao diện và đại biểu.
http://msdn.microsoft.com/en-us/library/windows/apps/br212455(v=vs.110).aspx
này có ý nghĩa bởi vì kể từ khi nó được định nghĩa là một giao diện cho phép trình biên dịch ++/CX C để biên dịch các chức năng mã gốc cho các đối tượng thực tế, và sau đó sử dụng giao diện chung trong một thời trang tương tự như C mẫu ++. Mã gốc cho các hàm được biên dịch và giao diện chung được sử dụng để làm việc với các kiểu khác nhau.
Đối với trình biên dịch có vẻ như đây là sự khác biệt giữa C++/CLR và C++/CX. /clr: Các lớp Generics, giao diện & các đại biểu được phép. /ZW: Giao diện chung & chỉ dành cho đại biểu.
Nếu bạn nhìn vào đây http://msdn.microsoft.com/en-us/library/windows/apps/hh699870(v=vs.110).aspx, bạn sẽ nhận thấy rằng không có quy tắc chung cho các lớp học.
Nhưng nếu bạn đọc chủ đề này http://msdn.microsoft.com/en-us/library/windows/apps/hh755792(v=vs.110).aspx bạn sẽ nhận thấy rằng các generics được áp dụng như giao diện.
Một "lớp chung" trong C++/CX đạt được bằng cách sử dụng các mẫu C++ chuẩn. Sự khởi tạo hoặc trình biên dịch tạo ra loại đặc biệt của generic được xuất ra siêu dữ liệu, chứ không phải bản thân mẫu. Vì vậy, bạn có thể thấy một MyClass và MyClass từ siêu dữ liệu nhưng không phải là MyClass gốc. Điều này không đúng đối với trường hợp giao diện chung được xuất sang siêu dữ liệu dưới dạng loại chung.
biết thêm thông tin về vấn đề này có thể được tìm thấy ở đây http://en.wikipedia.org/wiki/Windows_Runtime
Vì vậy, để trả lời đầy đủ các câu hỏi, tính đến thời điểm này, các mã trong các phương pháp là mã gốc precompiled trong dll đầu ra hoặc exe và được gắn vào thực tế không các lớp chung. NHƯNG mã có thể được sử dụng chung bằng cách sử dụng các giao diện chung. Vì vậy, mười lớp khác nhau có thể thực hiện IMyInterface và sau đó một biến kiểu IMyInterface có thể được sử dụng để làm việc với các cá thể của mười loại khác nhau chẳng hạn.
Vì vậy, câu trả lời ngắn gọn là không có gì giống như các lớp chung chung trong C++/CX như có trong C++/CLR. Sử dụng các mẫu cho cùng một hiệu ứng trong các ứng dụng C++/CX. Nếu bạn phải có C++ generics thì hãy sử dụng dll được tạo bằng C++/CLI và làm việc mã đó từ một chương trình được biên dịch như C++/CX.
Lưu ý! Tôi lượm lặt điều này nhiều từ việc kiểm tra các bài báo khác nhau và một số trong số đó tại msdn dường như nói rằng chúng có thể bị thay đổi.
Bây giờ, việc sử dụng các giao diện chung trong C++/CX với các mẫu có lẽ là những gì chúng có ý định. Vì vậy, bạn tạo một mẫu có tên là MyClass và sau đó nó thực hiện giao diện chung của bạn được gọi là MyInterface, vì vậy nếu bạn sau đó tạo một mẫu MyClass instantiation, kiểu mới sẽ tự động triển khai MyInterface và giao diện này sau đó có thể được sử dụng ở bất kỳ đâu. Vì vậy, bên ngoài tệp dll và các tệp tiêu đề, các mô-đun và tệp C++/CX khác có thể làm việc với các kiểu như MyInterface mà không cần tệp tiêu đề, vì bản mẫu ngay bên trong dll đã biên dịch, nhưng tệp C++ sử dụng siêu dữ liệu biết cách tạo kiểu MyInterface vì nó có siêu dữ liệu cho MyInterface, nhưng không phải siêu dữ liệu cho MyClass.
Trong ngắn hạn không có lớp chung và giao diện chung và ủy quyền hỗ trợ trong C++/CX là tất cả những gì thực sự hoạt động giống như Generics trong C++/CLI.
Mùi giống như phương pháp "chúng ta hãy bỏ mọi thứ vào đối tượng và sau đó quay lại" của Java để tiếp cận với generics. –
một thời gian chạy dựa chung chung sẽ được. C + + loại chung xóa là tăng :: bất kỳ, nhưng bạn không nên làm generics thời gian chạy nếu bạn không phải, và hầu hết mọi người không bao giờ phải. Sử dụng mẫu để thay thế. –
Tôi nghĩ rằng đó là một điều thời gian biên dịch. Khi bắt đầu một sự bắt đầu, như "MyTemplate obj;", trình biên dịch sẽ tạo ra một bản sao của định nghĩa lớp bê tông bằng cách sử dụng "MyTemplate" và "RealType", và sau đó sử dụng nó để tạo đối tượng. Không có mẫu nào sau khi biên dịch. –
Lyn