Tôi luôn tự hỏi tại sao bạn không thể sử dụng các lớp được định nghĩa cục bộ làm các biến vị ngữ cho các thuật toán STL.Sử dụng các lớp địa phương với các thuật toán STL
Trong câu hỏi: Approaching STL algorithms, lambda, local classes and other approaches, BubbaT đề cập nói rằng 'Kể từ khi chuẩn C++ cấm loại địa phương được sử dụng như các đối số'
Ví dụ mã:
int main() {
int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
std::vector<int> v(array, array+10);
struct even : public std::unary_function<int,bool>
{
bool operator()(int x) { return !(x % 2); }
};
std::remove_if(v.begin(), v.end(), even()); // error
}
Có ai biết nơi ở tiêu chuẩn là hạn chế? Lý do cho việc không cho phép các loại địa phương là gì?
EDIT: Kể từ C++ 11, nó là hợp pháp để sử dụng một loại địa phương như một mẫu đối số.
Tôi biết, nhưng tôi muốn biết nơi để xem liệu tôi có thể hiểu tại sao không. Bạn có một tham chiếu vào tiêu chuẩn? –
Bạn đang đề cập đến 14.3.1.2, "đối số kiểu mẫu"? – greyfade
Tôi đã thêm một số thông tin và liên kết có thể trợ giúp. Tóm lại, hạn chế là một sai lầm có thể nhanh chóng được khắc phục nếu tiêu chuẩn phát triển nhanh hơn ... – Klaim