2012-01-23 30 views
7

Tôi đang cố gắng sử dụng hàm C++ 11 emplace() của bản đồ, nhưng NetBeans cho biết bản đồ không có chức năng như vậy. Nhìn vào các tiêu đề, đó là "đúng" - không có đề cập (trên Fedora 16) của emplace(). Đó là tất cả tốt và tốt, bạn biết ... nhưng tôi muốn sử dụng emplace().std :: map :: emplace() mất tích - các thư viện lỗi thời?

Tôi làm cách nào để bật chức năng này? Tôi biết thực tế là nó tồn tại từ tháng 3 năm ngoái, có lẽ sớm hơn. Một tìm kiếm toàn diện cho thấy rằng emplace() về cơ bản chỉ tồn tại trên hệ thống của tôi trong các tiêu đề cho các danh sách và các vectơ. Vì không có một bản sửa đổi lớn của C++ trong gần một thập kỷ, tôi không có bất kỳ tài liệu tìm kiếm may mắn về việc phải làm gì nếu các thư viện là "sai".

+1

@CharlesBailey: Điều anh ấy đang cố gắng nói là "vì không có sửa đổi lớn trong thập kỷ trước khi C++ 11 Tôi không biết mọi người thường làm gì trong những tình huống như vậy" – PlasmaHH

+0

Bạn đang sử dụng trình biên dịch nào và phiên bản nào? –

+0

@David Brown GCC 4.6.2, mặc dù tôi muốn nó cũng biên dịch trên máy chủ của tôi (GCC 4.4.5). – DigitalMan

Trả lời

2

Nếu thực hiện của bạn không hỗ trợ gì đó, bạn có hai lựa chọn:

  • không sử dụng tính năng
  • sử dụng khác thực hiện hỗ trợ những gì bạn cần.

Thực tế là có một tiêu chuẩn mới không mở rộng các lựa chọn. Trong thực tế, nó làm giảm nó như bạn sẽ có thêm khó khăn trong việc tìm kiếm một thực hiện hỗ trợ tất cả mọi thứ mà bạn muốn cho mỗi một mục tiêu của bạn.

Lưu ý rằng đối với những thứ thư viện thuần túy, việc triển khai khác có thể là do bạn thực hiện: trình bao bọc tương thích có vẻ ngoài tăng lên trong thời gian chuyển tiếp. Nhưng bạn phải chú ý đến các hiệu ứng xung đột tên (khả năng hiển thị của trình bao bọc tương thích có thể thêm sự mơ hồ đối với mã khi đối tượng địa lý xuất hiện ở vị trí chuẩn của nó).

+0

Vì vậy, nếu tôi hiểu chính xác điều này, "Thư viện GNU ISO C++" chưa hỗ trợ tính năng này? Có cách nào để kiểm tra phiên bản triển khai nào của tôi và nếu đó là phiên bản mới nhất? Ai đó, một nơi nào đó, đã nhận được nó để làm việc (mà không bao giờ gặp phải vấn đề này), tôi chỉ không biết chính xác những gì họ đang sử dụng. – DigitalMan

+0

@DigitalMan - Rất nhiều sự hỗ trợ C++ 11 được nhắm mục tiêu tại GCC 4.7 vì có sự không tương thích API nghiêm trọng trong thư viện. –

+0

@Bo Persson Cảm ơn bạn đã tip. Từ [GCC 4.7 ghi chú phát hành] (http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.200x), hỗ trợ cho các thùng chứa kết hợp là một phần thiếu thành viên emplace. _Just_ các thành viên emplace. Chèn tất cả các cách giải thích ở đây. – DigitalMan

1

GCC 4.7 không hỗ trợ điều này vì đã có các vấn đề chưa được giải quyết với tiêu chuẩn vào thời điểm đó. Nó được thực hiện trong 4.8 và cao hơn. Bạn sẽ cần -std = C++ 11

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