xem xét lớp này chứa đặc biệt lưu trữ các kiểu có chứa cả hai chìa khóa và giá trị bên trong nó, vì vậyTemplate với giá trị mặc định của tham số con trỏ phương pháp
template<typename K, typename T, K (T::*method)() const>
class Container
{
//...
};
K là loại một chìa khóa, T là một loại giá trị và con trỏ phương thức được sử dụng để truy xuất khóa từ giá trị.
Nó hoạt động tốt nhưng tôi muốn bao gồm một mặc định cho con trỏ phương pháp để khi nó không được quy định bởi người gọi nó sẽ là operator K() const
như vậy:
template<typename K, typename T, K (T::*method)() const = &T::operator K const>
nhưng điều này không biên dịch nêu có là no member operator const K on A (<- my class I test this with)
khi tôi cố gắng khởi tạo nó (và có một phương thức như vậy). Thậm chí có thể có giá trị mặc định của đối số mẫu con trỏ phương thức không? Nếu có, cú pháp chính xác là gì?
EDIT: Ngoài các giải pháp dưới đây có một "sửa chữa" cho các trường hợp khi T là một con trỏ có sử dụng tính năng mới C++ 11 std::remove_pointer<T>::type
, vì vậy:
template<typename K, typename T, K (std::remove_pointer<T>::type::*method)() const = &std::remove_pointer<T>::type::operator K>
Ý tưởng là [về nguyên tắc] (http://ideone.com/fgtF5y). Nó có thể chỉ là vấn đề đánh vần tên của hàm cụ thể (hàm chuyển đổi) một cách chính xác. –
[Có] (http://ideone.com/k1bCEJ), có thể xóa 'const'? –
'toán tử K const' (==' toán tử const K') sẽ là hàm chuyển đổi thành 'const K'. –