2011-05-24 17 views
23

Tôi đã làm C++ trong một thời gian dài nhưng tôi chỉ gặp một câu hỏi sáng nay mà tôi không thể đưa ra câu trả lời: "Có thể tạo bí danh cho các không gian tên trong C++ không?"Đổi tên các không gian tên

Hãy để tôi đưa ra một ví dụ. Hãy nói rằng tôi đã có tiêu đề sau đây:

namespace old 
{ 
    class SomeClass {}; 
} 

nào, vì những lý do không xác định phải trở thành:

namespace _new 
{ 
    namespace nested 
    { 
    class SomeClass {}; // SomeClass hasn't changed 
    } 
} 

Bây giờ nếu tôi có một cơ sở mã cũ trong đó đề cập đến SomeClass, tôi có thể nhanh chóng (và dơ dáy) "sửa chữa" sự thay đổi bằng cách thêm:

namespace old 
{ 
    typedef _new::nested::SomeClass SomeClass; 
} 

Nhưng có một cách để nhập khẩu mọi thứ từ _new::nested i nto old mà không cần phải typedef rõ ràng là mọi loại?

Tương tự như Python import * from ....

Cảm ơn bạn.

+8

'mới' có thể là một ví dụ không tốt cho tên không gian tên. ;) – Xeo

Trả lời

48
using namespace new::nested; 

Example at Ideone.

Hoặc nếu bạn thực sự muốn có một bí danh thực:

namespace on = one::nested; 

Example at Ideone.

+4

Cái thứ hai tốt hơn cái đầu tiên ... cái đầu tiên không tạo ra một bí danh, mà đúng hơn là mang các ký hiệu từ không gian tên khác và có thể kết thúc trong các xung đột tên hoặc các kết quả không mong muốn (nếu quá tải hàm trong không gian tên 'nested' là một kết hợp tốt hơn so với tình trạng quá tải trong không gian tên hiện tại, nó sẽ đột nhiên thay đổi lựa chọn của nó) –

+0

@ David: Vâng, nhưng dường như giải quyết vấn đề mà OP dường như có. :) – Xeo

28

này:

namespace old = newns::nested; 

sẽ có vẻ là những gì bạn muốn.