#include <iostream>
template <class T>
void foo(T) {
std::cout << "foo(T)" << std::endl;
}
template <class T>
void foo(T*) { //#3
std::cout << "foo(T*)" << std::endl;
}
#define TEST
#ifdef TEST
template <>
void foo(int*) { //#1
std::cout << "foo(int*)" << std::endl;
}
#else
template <>
void foo<int*>(int*) { //#2
std::cout << "foo<int*>(int*)" << std::endl;
}
#endif
int main(int argc, char **argv) {
int* p = 0;
foo(p);
return 0;
}
sự khác biệt giữa # 1 và # 2 là gì. Nếu tôi xác định TEST, công việC# 1. Nhưng nếu tôi nhận xét nó, # 3 hoạt động ... Và đó là cách đúng để viết chuyên môn mẫu chức năng ...chuyên môn mẫu chức năng không thành công?
Có một số tình huống mà nó là thuận tiện hoặc cần thiết để xác định các mẫu tranh luận (s) . Nơi rõ ràng khi cần thiết để xác định các đối số là nếu đối số mẫu không được suy luận. Những nơi thuận tiện là khi bạn cần hướng đối số đến loại được chuyển đổi thích hợp. Khi bạn muốn xác định rõ ràng đối số bạn thường không thể sử dụng quá tải. –