"和 "template template "Có gì khác biệt-6ren"> "和 "template template "Có gì khác biệt - vì tôi muốn tách biệt giao diện và cách triển khai thay vì chỉ triển khai lớp mẫu trong tệp tiêu đề, nên tôi chia nó thành .h và .tpp (.tpp để nó không biên dịch với *.cpp) . Sau đó tôi thêm tpp vào cuối tệp tiêu đề, ngay tại -6ren">
cuốn sách gpt4 ai đã làm

c++ - "template "和 "template template "有什么区别

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

因为我喜欢分离接口(interface)和实现,而不是只在头文件中实现模板类,我将它分成 .h 和 .tpp(.tpp 这样它就不会用 *.cpp 编译)。然后我将 tpp 包含在头文件的末尾,就在 #endif Trước. Hậu vệ đánh đầu. Vì lựa chọn này, trong quá trình triển khai (.tpp), để xác định một hàm, tôi phải xác định từng hàm bằng cách tham chiếu nó thông qua tham số mẫu của nó, như sau:

mẫu 
T MyTemplate::functionName(T t){...}

Tuy nhiên, tôi nhận thấy rằng khi xác định hàm thành viên có tham số mẫu bổ sung, tôi phải xác định nó bằng cách tham chiếu nó bằng cách sử dụng:

mẫu 
mẫu
T MyTemplate::extraTParamFunc(T t, C c){...}

thay thế:

mẫu 
T MyTemplate::extraTParamFunc(T t, C c){...} // không có khai báo nào khớp với 'T MyTemplate::extraTParamFunc(T, C)'

Điều này làm tôi bối rối. Vậy tại sao lại thế này? mẫu Sự khác biệt là gì? Và mẫu mẫu ?

Ngoài ra, đây là các ví dụ cho .h và .tpp, đề phòng trường hợp điều này có liên quan:

//MyTemplate.h
#ifndef MYTEMPLATE_H
#defineMYTEMPLATE_H

mẫu
lớp MyTemplate {

mẫu
T extraTParamFunc(T t, C c);
...
}

#include "MyTemplate.tpp"
#endif //MYTEMPLATE_H

//MyTemplate.tpp
#include "MyTemplate.h"

mẫu
mẫu
T MyTemplate::extraTParamFunc(T t, C c){...}

...

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

Về nguyên tắc, bạn có thể thấy câu trả lời trong tệp tiêu đề của mình:

mẫu 
lớp MyTemplate {

mẫu
T extraTParamFunc(T t, C c);
...
}

类(class)Mẫu của tôilà một mẫu. Trong mẫu này bạn xác định một mẫu khác, hàm MyTemplate::extraTParamFunc .Ngoài ra, nếu bạn viết tên hàm đầy đủ bằng tham số mẫu, bạn có thể thấy:MyTemplate::extraTParamFunc() .Điều này có liên quan đếnMyTemplate::extraTParamFunc()khác nhau hoặc MyTemplate::extraTParamFunc()Nó sẽ như vậy.

Vì vậy, bạn có một mẫu trong một mẫu và cú pháp cần phản ánh điều này. Nếu bạn thực hiện các chuyên môn về mẫu, đặc biệt là các chuyên môn từng phần hoặc nếu bạn có các tham số mẫu tùy chọn, nếu C++ cho phép bạn kết hợp hai mẫu trong một mẫu<> , thì cú pháp sẽ mơ hồ. ĐƯỢC RỒI.

Về C++ - sự khác biệt giữa "mẫu " và "mẫu mẫu " là gì, 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/55062465/

28 4 0
Taklimakan
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
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