2011-10-17 36 views
7

Thay thế boost::regex bằng std::regex vì chúng tôi đang sử dụng gcc 4.6 trong công ty tôi gặp phải sự cố với phương thức empty() của lớp đó - về cơ bản, không biến nó thành boost::regex thành lớp std::regex. Tôi không chắc liệu đây có phải là vấn đề của gcc hay phương pháp này không làm cho nó thành chuẩn C++ 11 chút nào, nhưng đoạn mã đó phụ thuộc nhiều vào tính năng này. Vì vậy, câu hỏi là - là có một cách trong C++ 11 std::regex để kiểm tra nếu biểu thức đã bao giờ được thiết lập hoặc tôi nên dính vào boost::regex cho phần còn lại của cuộc đời tôi?boost :: regex vs std :: regex - không thể tìm thấy phương thức empty()?

+0

Nó không có trong C++ 11 ... – PlasmaHH

+0

@PlasmaHH: Thật sao? Tôi nghĩ là vậy. Đó là trong MSVC, wikipedia cũng đề cập đến nó ở đây - http://en.wikipedia.org/wiki/C%2B%2B11#Regular_expressions Vì vậy, nó cuối cùng đã không làm cho nó vào phút cuối tiêu chuẩn? –

+1

@VladLazarenko Tôi đang xem N3290 và không thể tìm thấy nó. – pmr

Trả lời

10

empty() đã bị xóa khỏi std::regex một thời gian dài trước đây. N1507 (2003-09-16) là giấy gốc để đề xuất loại bỏ của nó (tìm kiếm "Biểu thức chính quy không hợp lệ/trống là gì?"). Vấn đề này được hướng đến những gì sau đó là std::tr1:regex. Nó được ghi lại trong các vấn đề LWG tr1 liệt kê là vấn đề 7.28 và có độ phân giải sau:

Thảo luận tại Kona. LWG đồng ý rằng hàm tạo mặc định nên tương đương với cấu trúc xây dựng từ một chuỗi rỗng. Để lại phần mở này hiện nay một phần vì chúng tôi cần từ ngữ thể hiện điều đó, và một phần là vì không rõ ràng có bất kỳ điểm nào để có chức năng thành viên() lần đầu tiên.

N1711 (2004-11-04) là bản nháp TR1 đầu tiên thiếu basic_regex::empty(). Từ đó nó được nhập từ TR1 vào C++ 11 mà không cần thảo luận thêm.

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