namespace A
{
#include <iostream>
};
int main(){
A::std::cout << "\nSample";
return 0;
}
답변
짧은 답변 : 제
긴 대답 : 음, 정말. 당신은 그것을 가짜로 만들 수 있습니다. 당신은 외부를 선언하고 다음과 같이 네임 스페이스 내에서 문을 사용하여 사용할 수 있습니다 : 그것은에 액세스 한 경우에도, 그것은 표준 네임 스페이스에 액세스 할 수 없습니다 때문에
#include <iostream>
namespace A
{
using std::cout;
};
int main(){
A::cout << "\nSample";
system("PAUSE");
return 0;
}
당신은, 라이브러리를 지역화 할 수 없습니다.
또한 "다른 문제는 네임 스페이스 내부의 정규화 된 이름이 A :: std :: cout이지만 라이브러리에는 외부 네임 스페이스로 정규화 된 이름이 포함되지 않는다는 것입니다." Jonathon Leffler에게 감사드립니다.
문제는 다른 사람들이 모든 코드에서 무엇을 할 수 있는지 알려주지 않으려는 경우 iostream을 포함시킬 자체 cpp 파일을 가질 수 있고 거기에 정의 된 네임 스페이스를 가질 수 있습니다. 그런 다음 주 (또는 무엇이든)에 포함시키고 프로그래머가 할 수있는 일과 할 수없는 일을 알리십시오.
다른 문제는 네임 스페이스 내부의 정규화 된 이름이 A :: std :: cout이지만 라이브러리가 외부 네임 스페이스로 정규화 된 이름을 포함하지 않는다는 것입니다. –
아주 좋은 지적입니다. 추가됨. +1 – jkeys
당신은 쓸 수 :
#include <vector> // for additional sample
#include <iostream>
namespace A
{
namespace std = std; // that's ok according to Standard C++ 7.3.2/3
};
// the following code works
int main(){
A::std::cout << "\nSample"; // works fine !!!
A::std::vector<int> ints;
sort(ints.begin(), ints.end()); // works also because of Koenig lookup
std::cout << "\nSample"; // but this one works also
return 0;
}
Thit 접근이 별명 네임 스페이스라고합니다. 이 기능의 실제 목적은 다음 샘플에서 나타납니다.
namespace Company_with_very_long_name { /* ... */ }
namespace CWVLN = Company_with_very_long_name;
// another sample from real life
namespace fs = boost::filesystem;
void f()
{
fs::create_directory("foobar"); // use alias for long namespace name
}
컴파일러가 없습니까? –
왜 그렇게하고 싶습니까? – AraK