Có thể suy ra tham số mẫu không phải kiểu từ tham số hàm mẫu không?Giảm bớt thông số mẫu không kiểu
xem xét mẫu đơn giản này:
template <int N> constexpr int factorial()
{
return N * factorial<N - 1>();
}
template <> constexpr int factorial<0>()
{
return 1;
}
template <> constexpr int factorial<1>()
{
return 1;
}
Tôi muốn để có thể thay đổi factorial
vì vậy mà tôi cách khác có thể gọi nó như thế này:
factorial(5);
và để cho các con số trình biên dịch ra giá trị của N tại thời gian biên dịch. Điều này có khả thi không? Có lẽ với một số bổ sung C++ 11 ưa thích?
Tại sao bạn sẽ muốn làm điều đó? Hàm 'factorial' không chấp nhận bất kỳ tham số nào.Lợi ích của 'giai thừa (5)' trên đúng 'giai thừa <5>() 'là gì? –
@CodyGray: Tôi nghĩ ý tưởng sẽ tạo ra một hàm 'factorial' chung có thể tính toán kết quả tại thời gian biên dịch nếu nó được biểu diễn theo thời gian biên dịch, nhưng cũng có thể tính toán nó trong thời gian chạy nếu đầu vào là một biến bình thường. –
@Matteo: Theo tôi hiểu, không có gì được tính toán trong thời gian chạy vì biểu thức được khai báo là 'constexpr'. Và dù sao đi nữa, tôi không hiểu tại sao lại có vấn đề khi chuyển một "biến số bình thường" thay vì 5 bằng cách sử dụng cú pháp chuẩn. Câu hỏi đặt ra ở đây là "làm thế nào tôi có thể tránh gõ dấu ngoặc nhọn", và tôi không hiểu động cơ. –