Jak Mogę "anulować" przestrzeń nazw?
Jednym z kaprysów mojego systemu programistycznego (Codegear C++Builder) jest to, że niektóre automatycznie generowane nagłówki nalegają na posiadanie...
using namespace xyzzy
...wypowiedzi w nich, które wpływają na mój kod, kiedy najmniej tego chcę lub oczekuję.
Czy Jest jakiś sposób, abym mógł w jakiś sposób anulować/nadpisać poprzednią instrukcję "using", aby tego uniknąć.
Może...unusing namespace xyzzy;
7 answers
Nie. Ale istnieje potencjalne rozwiązanie: jeśli umieścisz swoją dyrektywę include W własnej przestrzeni nazw, jak to...
namespace codegear {
#include "codegear_header.h"
} // namespace codegear
...następnie efekty użycia dyrektyw w tym nagłówku są zneutralizowane.
To może być problematyczne w niektórych przypadkach. Dlatego każdy przewodnik po stylach C++ zdecydowanie zaleca , a nie umieszczanie dyrektywy "using namespace" w pliku nagłówkowym.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-03 17:39:08
Nie możesz nie używać przestrzeni nazw. Jedyne, co możesz zrobić, to umieścić using namespace
-statement blokiem, aby ograniczyć jego zakres.
Przykład:
{
using namespace xyzzy;
} // stop using namespace xyzzy here
Może możesz zmienić szablon, który jest używany z automatycznie generowanych nagłówków.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-30 02:29:50
Możesz utknąć używając jawnych przestrzeni nazw w konfliktach:
string x; // Doesn't work due to conflicting declarations
::string y; // use the class from the global namespace
std::string z; // use the string class from the std namespace
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-12 22:17:09
Dla przyszłego odniesienia : od wersji XE istnieje nowa wartość ,którą można # zdefiniować, aby uniknąć przerażającego using namespace System;
int include: DELPHIHEADER_NO_IMPLICIT_NAMESPACE_USE
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-10 23:17:22
Co powiesz na użycie sed, Perla lub innego narzędzia wiersza poleceń w ramach procesu budowania, aby zmodyfikować wygenerowane nagłówki po ich wygenerowaniu, ale zanim zostaną użyte?
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-03 17:55:23
Szybki eksperyment z Visual Studio 2005 pokazuje, że możesz zamknąć te nagłówki we własnej przestrzeni nazw, a następnie {[0] } to, czego potrzebujesz z tej przestrzeni nazw (ale nie use
cała przestrzeń nazw, ponieważ wprowadzi przestrzeń nazw, którą chcesz ukryć.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-03 17:37:54
#include<iostream>
#include<stdio.h>
namespace namespace1 {
int t = 10;
}
namespace namespace2 {
int t = 20;
}
int main() {
using namespace namespace1;
printf("%d" , t);
printf("%d" , namespace2::t);
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-02 04:56:37