Zum Beispiel habe ich zunächst ein Beispielprogramm:Ist es möglich, Variablennamen mit dem Namespace wiederzuverwenden?
#include<iostream>
#include<algorithm>
using namespace std;
int main() {
int a[3];
sort(begin(a),end(a));
cin;
}
Jetzt möchte ich ändern std::cin
(um mehr Funktionen zu bieten wie eine Funktion aufrufen, wenn der Eingang ausfällt). So stelle ich einen Header mystd.h
wie:.
#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;
}
Aber die Änderung nicht bequem zu sein scheint (. Anwender alle Komponenten erwähnen muß using std::sort;using mystd::cin;
oder all cin
mit mystd::cin
ersetzen using namespace std;using mystd::cin;
bewirkt, dass die cin
mehrdeutig)
In der Tat Ich werde eine modifizierte Standardbibliothek schreiben und sie so praktisch wie die ursprüngliche verwenden. Der ideale Code I Benutzer wünschen schreiben kann, ist:
(PS: Das bedeutet mystd
kann genauso std
verwendet werden, nicht angibt Ich möchte Benutzer ermutigen using namespace
überall zu verwenden)
#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;
}
Ich habe versucht, hinzufügen using namespace std;
in mystd
, aber es verursacht auch Mehrdeutigkeit.
Eine komplizierte Lösung, die ich Bild erstellen kann, ist eine using-Anweisung wie using std::string;
in mystd
für alle Std-Mitglieder nicht geändert zu erstellen.
Gibt es einen praktischeren Weg für mich, mystd.h
zu implementieren?
Ich schlage vor, in 'mystd.h' Sie haben keine' using std :: 'Anweisungen, und setzen Sie explizit die nicht-' mystd'-Bezeichner mit 'std ::' - alles andere klingt chaotisch und fehleranfällig. –
Schreiben von Code, der ermutigt oder sogar schlimmste * erwartet * die verbreitete Verwendung von 'using namespace X' ist eine schlechte Idee. –
Ich möchte nicht ermutigen 'using namespace' Verwendungen, wollen nur identische Verwendungen für' std' bereitstellen. Der Namensraum im Titel bezieht sich auf das Importieren von 'std'-Elementen in' mystd'. Es tut mir leid, dass ich es anfangs nicht klar ausgedrückt habe. – James