Ví dụ, ban đầu tôi có một chương trình mẫu:Có thể sử dụng lại tên biến có sử dụng không gian tên không?
#include<iostream>
#include<algorithm>
using namespace std;
int main() {
int a[3];
sort(begin(a),end(a));
cin;
}
Bây giờ tôi muốn thay đổi std::cin
(để cung cấp thêm các chức năng như gọi một chức năng khi đầu vào thất bại). Vì vậy, tôi giới thiệu một tiêu đề mystd.h
như:.
#include<iostream>
#include<algorithm>
//begin of mystd.h
namespace mystd {
struct cin_wrapper {
}cin;
}
//end of mystd.h
using namespace std;
int main() {
int a[3];
sort(begin(a),end(a));
mystd::cin;
}
Nhưng sự thay đổi có vẻ là không thuận tiện (. Người sử dụng phải đề cập đến tất cả các thành phần using std::sort;using mystd::cin;
hoặc thay thế tất cả cin
với mystd::cin
using namespace std;using mystd::cin;
làm cho cin
mơ hồ)
Trong thực tế Tôi sẽ viết một thư viện chuẩn đã sửa đổi và sử dụng nó một cách thuận tiện như bản gốc. Mã lý tưởng tôi muốn người dùng có thể viết là:
(PS: điều này có nghĩa mystd
có thể chỉ được sử dụng như std
, không chỉ tôi muốn khuyến khích người dùng sử dụng ở khắp mọi nơi using namespace
)
#include<iostream>
#include<algorithm>
#include "mystd.h"
using namespace mystd;
int main() {
int a[3];
sort(begin(a),end(a));//std::sort
cin;//mystd::cin
}
//or
int main() {
int a[3];
mystd::sort(mystd::begin(a),mystd::end(a));//sort, begin, end from std
mystd::cin;
}
Tôi đã thử để thêm using namespace std;
vào mystd
nhưng cũng gây ra sự mơ hồ.
Một giải pháp phức tạp mà tôi có thể tạo hình là tạo câu lệnh sử dụng như using std::string;
trong mystd
cho tất cả thành viên không được sửa đổi.
Có cách nào thực tế hơn để tôi triển khai mystd.h
không?
Tôi đề nghị bên trong 'mystd.h' bạn không có bất kỳ câu lệnh' using std :: ', và tiền tố một cách rõ ràng tiền tố không phải' mystd' với 'std ::' - bất kỳ điều gì khác có vẻ hỗn loạn và dễ bị lỗi. –
Viết mã khuyến khích hoặc thậm chí tệ nhất * mong đợi * việc sử dụng rộng rãi của 'sử dụng không gian tên X' là một ý tưởng tồi. –
Tôi không muốn khuyến khích sử dụng 'sử dụng không gian tên', chỉ muốn cung cấp các tập quán giống với' std'. Không gian tên trong tiêu đề có liên quan đến việc nhập các thành viên 'std' vào' mystd'. Xin lỗi vì đã không thể hiện rõ ràng lúc đầu. – James