Tôi đang đọc Hướng dẫn hoàn chỉnh mẫu C++ và đã xem mã() và các phần khác ngoại trừ định nghĩa và gọi hàm):Thông số mẫu chức năng không kiểu
#include <vector>
#include <algorithm>
#include <iostream>
template <typename T, int value>
T add (T const & element){
return element + value;
}
int main() {
int a[] = {1,2,3,4};
int length = sizeof (a)/sizeof (*a);
int b[length];
std::transform (a, a + length, b, (int(*)(int const &))add <int, 5>); //why?
std::for_each (b, b + length, [](int const & value){ std::cout << value << '\n'; });
return 0;
}
Tôi không hiểu sau khi đọc từ cuốn sách tại sao chúng ta cần typecasting của cuộc gọi chức năng?
EDIT: Giải thích từ cuốn sách:
add là một hàm template, và chức năng các mẫu được coi là đến tên một tập hợp các hàm quá tải (ngay cả khi các thiết lập chỉ có một thành viên). Tuy nhiên, theo tiêu chuẩn hiện hành, không thể sử dụng các tập chức năng quá tải để khấu trừ tham số mẫu. Vì vậy, bạn phải biến đổi thành kiểu chính xác của hàm template luận: ...
Compiler: g ++ 4.5.1 trên Ubuntu 10.10