Bạn không thể. Tiêu chuẩn này đưa ra một số giải pháp thay thế ít tốt:
// The stuff you want to use.
namespace foo { namespace bar {
class Frob {};
} }
Bây giờ, từ gây ô nhiễm nhất để gây ô nhiễm nhất.
typedef
làm cho nó có thể viết thư bí danh trong một phần private
của định nghĩa lớp học của bạn:
// I)
class Schwarzschild {
typedef foo::bar::Frob FbFrob;
public: Schwarzschild() : a(FbFrob()), b(FbFrob()) {}
private: FbFrob a,b,c;
};
Nhưng bạn cũng có thể sử dụng nó đơn vị trên toàn cầu, nhưng với một cơ hội để đổi tên nó:
// II)
class Schwarzschild {
public: Schwarzschild();
private: foo::bar::Frob a,b,c;
};
// cxx-file
typedef foo::bar::Frob FbFrob;
Scharzschild::Scharzschild() : a(FbFrob()) {}
Bạn cũng có thể không gian tên bí danh:
// III)
namespace fb = foo::bar;
class Planck {
public: Planck() : a(fb::Frob()), b(fb::Frob()) {}
private: fb::Frob a,b,c;
};
Hoặc bạn anh đào có thể chọn biểu tượng từ không gian tên khác, với những bất lợi mà Frob
của bạn có thể va chạm với một Frob
trong đơn vị của bạn dịch:
// IV)
using foo::bar::Frob;
class Mach {
public: Mach() : a(Frob()), b(Frob()) {}
private: Frob a,b,c;
};
Chỉ vì lợi ích của sự hoàn chỉnh, giải pháp gây ô nhiễm nhất là using namespace
.
// V)
using namespace foo::bar;
class Newton {
public: Newton() : a(Frob()), b(Frob()) {}
private: Frob a,b,c;
};
Lưu ý rằng III, IV và V cũng có thể bị giới hạn đối với tệp cxx của bạn, như trong ví dụ Schwarzschild.
Ngôn ngữ là gì? Vui lòng gắn thẻ một cách thích hợp. –
Xin lỗi Tomasz, và cảm ơn vì đã bình luận. Đã chỉnh sửa để thêm thẻ C++. – Ant
Để tránh nhầm lẫn nên gọi nó là "ctor-initializer" vì phần tử ngữ pháp C++ "initializer-list" là cái gì đó khác (phần giữa '{}' cho các bộ khởi tạo tổng hợp). Và những gì là xấu như vậy trong "gây ô nhiễm" phần còn lại của tập tin với việc sử dụng? Đó là tệp .cxx của bạn, không phải là tiêu đề vì vậy nó sẽ ổn. Một tùy chọn khác là làm 'sử dụng nsConstants :: ONE;', nhưng những gì bạn muốn là không thể. – PlasmaHH