Xin lỗi nếu điều này đã được yêu cầu trước đó, nhưng tôi không thể tìm thấy nó.chức năng truyền theo giá trị (?) Thay vì con trỏ hàm?
Vì vậy, tôi đang cố gắng tự học về mẫu và các tính năng C++ 11 mới (chủ yếu là lambdas, thứ mà tôi luôn thích bằng các ngôn ngữ khác).
Nhưng trong các thử nghiệm của tôi, tôi đã đến một cái gì đó tôi không hề biết nó làm việc, và tôi đang cố gắng để hiểu làm thế nào nó hoạt động nhưng không thể con số nó ra ..
Các mã sau đây:
template <class Func>
void Test(Func callback) {
callback(3);
}
void Callback(int i) {
std::cout << i << std::endl;
}
int main(int argc, char** argv) {
Test(&Callback); // this I was expecting to work, compiler will see its a pointer to a function
Test(Callback); // this also works, but how?!
return 0;
}
Nếu tôi hiểu cách thức hoạt động của mẫu, về cơ bản chúng là sơ đồ cho trình biên dịch để biết phải xây dựng gì, vì vậy lệnh gọi đầu tiên là Test(&Callback);
Tôi đã mong đợi làm việc vì trình biên dịch sẽ thấy mẫu nhận địa chỉ hàm và sẽ giả định đối số là một con trỏ.
Nhưng cuộc gọi thứ hai là gì? Mẫu giả định là gì? Một bản sao của một functio (nếu điều đó thậm chí làm cho bất kỳ ý nghĩa)?
cảm ơn câu trả lời. vì vậy nếu tôi không sử dụng mẫu và tuyên bố Test như: void Test (void (* callback) (int)) {...} cả hai cuộc gọi sẽ làm việc là tốt. thats tốt để biết. bị bệnh chắc chắn rằng tôi đọc các chủ đề bạn liên kết. – sap