Đối với mã tôi hiện đang làm việc, đôi khi chúng ta cần biên dịch trên một số hệ thống cũ hơn với các trình biên dịch cũ hơn (ví dụ: chúng tôi chạy các sim trên một phiên bản cũ hơn của IBM BlueGene/L, là hợp đồng hỗ trợ đưa ra một số trình biên dịch C++ cũ). Bản thân mã này sử dụng shared_ptrs, và ban đầu được viết để sử dụng std :: tr1 :: shared_ptr. Khi biên dịch trên máy BlueGene cũ, tôi nhanh chóng nhận ra rằng nó không có một tr1 :: thực hiện, và vì vậy tôi chuyển sang tăng :: shared_ptr. Hóa ra đó cũng là một tăng :: tr1 :: shared_ptr. Bây giờ mã đang được sử dụng rộng rãi hơn bên ngoài nhóm nghiên cứu của chúng tôi, tính di động đang trở nên quan trọng hơn.Làm thế nào để xử lý phát triển C++ std :: namespace? ví dụ: std :: tr1 :: shared_ptr so với std :: shared_ptr so với boost :: shared_ptr vs. boost :: tr1 :: shared_ptr
Thực hành tốt nhất (?) Là gì để xử lý các loại vấn đề thư viện chuẩn đang phát triển này trong một codebase lớn-ish? Tôi giả định rằng trong tiêu chuẩn C++ 11 mới, shared_ptr sẽ không còn trong không gian tên tr1, mà thêm một tiềm năng khác: std :: shared_ptr, tuy nhiên tôi đoán hỗ trợ phổ biến cho điều này sẽ là một cách tắt. Tôi muốn sử dụng tiêu chuẩn mới nhất nếu có thể, nhưng cần phải duy trì tính di động. Tôi có nên gắn bó với tăng cường không?
Có đã được trình biên dịch mà 'std :: shared_ptr' có sẵn, như VC2010 và các phiên bản gần đây của g ++.Nếu bạn cần hỗ trợ vô số các trình biên dịch khác nhau, việc gắn bó với boost có lẽ là dễ nhất. :) – Sven
Chỉ vì shared_ptr sẽ được thêm vào namespace std :: không có nghĩa là nó sẽ bị xóa * khỏi namespace std :: tr1 ::. Tôi biết rằng gcc/libstdC++ sẽ duy trì cả về sau. Trong thực tế, tôi chắc rằng studio hình ảnh sẽ giống nhau. – emsr
Tôi nghĩ rằng nếu bạn nhìn xung quanh, hỗ trợ cho std :: shared_ptr là rất rộng trên hầu hết các trình biên dịch trong hai năm qua ít nhất. Tôi sẽ dính với std :: đầu tiên, sau đó tìm std :: tr1 :: sau đó thử tăng theo thứ tự đó. – emsr