Cho một mẫuChuyên mẫu dựa trên dương tính của các đối số
template <int n>
void f(){...};
Tôi biết tôi có thể chuyên nó cho các giá trị cụ thể của n
bằng cách thực hiện:
template <>
void f<2>(){...};
Nhưng, có một phương pháp cho phép tôi để chuyên cho tất cả các tích cực n
?
tôi nghĩ về cách làm như sau
template <int n>
void f<n>(){
int dummy[n]; //invalid for n < 0
...
};
Vì vậy, đối n<0
mã này là không hợp lệ và trình biên dịch sẽ nghỉ mát để định nghĩa trước. Thật không may, tất cả những gì tôi nhận được là lỗi redefinition of 'void f<n>()'
.
Lưu ý: Tôi đoán điều này có thể không được tiêu chuẩn hỗ trợ. Tôi hỏi nếu không có một số phương pháp (có thể một số mẫu metaprogramming) để đạt được hiệu ứng này.
Vấn đề về phong cách, nhưng tôi thích đặt 'enable_if' vào kiểu trả về để không có tham số ma thuật treo quanh những thứ khó hiểu (người dùng và loại của hàm). – GManNickG