cuốn sách gpt4 ai đã làm

Chuyên mẫu bên trong với các tham số mặc định

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-03 00:20:42 27 4
mua khóa gpt4 Nike

Tôi gặp sự cố khi chuyên môn hóa mẫu bên trong khi tất cả các tham số của nó đều đã biết. Đây là một ví dụ:

mẫu 
cấu trúc bên ngoài
{
mẫu < tên kiểu T1 = void, tên kiểu T2 = void >
cấu trúc bên trong
{
loại typedef T1;
};
};
mẫu
mẫu
struct bên ngoài::inner { typedef int };

Điều này hoạt động tuyệt vời. Thay vào đó, nếu tôi chỉ định mẫu bên trong như thế này thì không:

mẫu 
mẫu < >
struct external::inner { typedef int type };

Đối với điều này, tôi gặp lỗi "Chuyên môn rõ ràng không hợp lệ trước thẻ '>'... Kèm theo mẫu lớp không được chuyên môn rõ ràng... Tham số mẫu không được sử dụng trong chuyên môn hóa một phần:...T0" . Không chắc WTAF có diễn ra ở đây không.

Tôi cũng đã thử điều này:

mẫu 
struct external::inner { typedef int type };

Tôi đã mong đợi điều này sẽ thất bại và thông báo lỗi không có gì đáng ngạc nhiên. Đó là: "Danh sách tham số mẫu quá ngắn".

Vì vậy, điều đúng đắn để làm là gì? Tôi chắc chắn có thể hack nó, nhưng nếu không bắt buộc thì tôi không muốn.

câu trả lời hay nhất

Điều này không được phép. Bạn không thể chuyên môn hóa hoàn toàn một thành viên của mẫu lớp mà bản thân nó không hoàn toàn chuyên biệt.

Theo đoạn 14.7.16 của tiêu chuẩn C++ 11:

Trong khai báo chuyên môn hóa rõ ràng cho thành viên của mẫu lớp hoặc mẫu thành viên xuất hiện trong phạm vi không gian tên, mẫu thành viên và một số mẫu lớp kèm theo của nó có thể vẫn không được chuyên biệt hóa, ngoại trừ việc khai báo sẽ không chuyên biệt hóa rõ ràng một mẫu thành viên lớp nếu các mẫu lớp kèm theo của nó cũng không được chuyên biệt hóa rõ ràng.[...]

Ngoài ra, đoạn 14.7.3/15 của tiêu chuẩn C++ 11 có nội dung:

Một thành viên hoặc một mẫu thành viên có thể được lồng trong nhiều mẫu lớp kèm theo. Trong một chuyên môn rõ ràng cho thành viên đó, khai báo thành viên phải được bắt đầu bằng một ký tự. mẫu<> cho mỗi mẫu lớp kèm theo được chuyên biệt rõ ràng. Example:

mẫu lớp A {
mẫu lớp B {
void mf();
};
};
mẫu<> mẫu<> lớp A::B;
mẫu<> mẫu<> void A::B::mf();

ví dụ cuối ]

Về c++ - các mẫu bên trong chuyên biệt với các tham số mặc định, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/17129543/

27 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress