2015-03-19 15 views
13

Tôi đã thấy biểu hiện này trong trang 189 của cuốn sách "hiệu quả Modern C++":"typename =" có nghĩa là gì trong các thông số mẫu?

template<typename T, 
      typename = typename std::enable_if<condition>::type> 
    explicit Person(T&& n); 

Tôi chỉ tự hỏi những gì hiện phần "typename =" có ý nghĩa. Nó chắc chắn trông giống như một đối số mặc định cho một tham số mẫu. Nhưng bạn không cần một cái gì đó như "typename some_name = ..." trong một đối số mặc định? Không có tên cho đối số mẫu thứ hai và tôi không thấy đối số mẫu thứ hai được sử dụng trong trường hợp này.

P.S. Khi tôi tìm kiếm trên google (hoặc bất kỳ công cụ tìm kiếm nào khác) cho câu trả lời, dấu bằng luôn bị loại bỏ và điều này chỉ làm cho việc tìm kiếm câu trả lời gần như không thể ...

Trả lời

12

Đó là tham số mẫu tùy chọn không có tên và mặc định giá trị.
Được sử dụng để áp dụng điều kiện enable_if; nó sẽ tạo ra một lỗi trình biên dịch nếu điều kiện không được đáp ứng.

Bạn có thể sử dụng chính xác cùng cú pháp cho các đối số phương thức bình thường.

+1

Cảm ơn rất nhiều. Tôi chỉ không biết có thể có các tham số mẫu chưa đặt tên. Bây giờ mọi thứ đều có ý nghĩa. – qft

+1

Để làm rõ cụm từ này: 'nó sẽ tạo ra lỗi trình biên dịch nếu điều kiện không được đáp ứng': Có công bằng khi nói trình kích hoạt này SFINAE (" Lỗi thay thế không phải là lỗi ") và hàm tạo không được xác định? (Tôi hơi mới với SFINAE.) – kevinarpe

Các vấn đề liên quan