Tôi muốn sử dụng các hàm variadic loại an toàn được giới thiệu trong C++ 11, nhưng không phải với các loại khác nhau. Một ví dụ:Các hàm variadic loại an toàn với các tham số cùng loại
template<typename T>
T maxv(T first, T second) {
return first > second ? first : second;
}
template<typename T, typename ... Rest>
T maxv(T first, T second, T ... rest) {
return maxv(first, maxv(second, rest));
}
Các loại tất cả các thông số đều giống nhau, vì vậy nó có lẽ có thể viết một cái gì đó như thế:
struct Point { int x,y; };
template<>
Point maxv(Point first, Point second) {
return first.x > second.x ? first : second;
}
maxv({1, 2}, {3, 4}); // no problem
maxv({1, 2}, {3, 4}, {5, 6}); // compile error
Nó biên dịch với lỗi này trong mingw g ++ 4.5:
error: no matching function for call to 'maxv(<brace-enclosed initializer list>, <brace-enclosed initializer list>, <brace-enclosed initializer list>)'
Vì anh ta không biết rằng {5, 6}
thuộc loại Point
. Giải pháp là gì?
Vui lòng s/variable/variadic/ –
Tôi phải hỏi, liệu dữ liệu của bạn có thực sự được lưu trữ trong nhiều biến không tổng hợp không giống như 'max_element' không phù hợp? –
Không chuyên chức năng, thay vào đó hãy chuyển vị từ. – Xeo