Например, изначально у меня есть пример программы:Можно ли повторно использовать имена переменных с использованием пространства имен?
#include<iostream>
#include<algorithm>
using namespace std;
int main() {
int a[3];
sort(begin(a),end(a));
cin;
}
Теперь я хочу изменить std::cin
(для обеспечения более функций, как вызвать функцию, когда вход не удается). Поэтому я вводит заголовок mystd.h
как:.
#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;
}
Но изменения, кажется, не очень удобно (. Пользователь должен перечислить все компоненты using std::sort;using mystd::cin;
или заменить все cin
с mystd::cin
using namespace std;using mystd::cin;
вызывает cin
неоднозначные)
В самом деле Я собираюсь написать модифицированную стандартную библиотеку и использовать ее так же удобно, как и исходную. Идеальный код, который я хочу пользователи могут писать это:
(PS: это означает, что mystd
можно просто использовать в качестве std
, не означает, я хочу, чтобы поощрять пользователей использовать 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;
}
Я пробовал добавить using namespace std;
в mystd
, но это также вызывает неоднозначность.
Одним из сложных решений, которые я могу сделать, является создание оператора using, такого как using std::string;
, в mystd
для всех членов std, не измененных.
Есть ли более практичный способ для меня реализовать mystd.h
?
Я предлагаю внутри 'mystd.h' у вас нет каких-либо' using std :: 'операторов и явно префикс идентификаторов non-'mystd' с' std :: '- все остальное звучит хаотично и подвержено ошибкам. –
Написание кода, который поощряет или даже худшее * ожидает * широкое использование 'using namespace X' - плохая идея. –
Я не хочу поощрять использование «использования пространства имен», просто хочу предоставить одинаковые способы использования 'std'. Пространство имен в заголовке связано с импортом членов 'std' в' mystd'. Извините, что вначале не ясно его выразить. – James