2011-12-17 2 views
2

Arguments 클래스는 나중에 그것을중첩 된 네임 스페이스는 어떻게 작동합니까?

https://github.com/joyent/node/blob/master/src/handle_wrap.h#L38

using v8::Arguments; 

에 액세스 할 수 v8 네임 스페이스에 사용되는,

https://github.com/joyent/node/blob/master/deps/v8/include/v8.h#L113

namespace v8 { 
// ... 
namespace internal { 
class Arguments; 
} 
// ... 
} 

그러나 v8::internal 네임 스페이스에 정의되어있는 리드 나를 ~에 "중첩 된 네임 스페이스는 어떻게 작동합니까?"

+0

어쩌면 이것이 왜 이렇게 끔찍한 질문 인 이유에 대해 4 명의 downvoters가 신경을 쓸 것입니까? – bitmask

+1

이것은 작동하지 않습니다. 아마도 v8 네임 스페이스에'typedef internal :: Arguments Arguments'가 있을까요? – neodelphi

+0

클래스 인수가 네임 스페이스 v8 (줄 1934)에 정의 된 것으로 보입니다. 전달 선언이 아무것도 사용되지 않는 것 같습니다 (구현 네임 스페이스에 인수가있을 필요는 없습니다). – UncleBens

답변

4

예상대로 작동합니다. 단일 레벨 네임 스페이스 (예 : std::)가 이미 글로벌 네임 스페이스 ::에 중첩되어 있다고 가정합니다. using namespace std; 지시문을 적용하지 않으면 std 이름 만 전역 네임 스페이스에 등록되고 std::의 기호는 전역 네임 스페이스에 직접 표시되지 않습니다.

두 번째 레이어를 추가하고 동일한 로직을 적용하십시오. v8::internal의 기호는 글로벌 네임 스페이스 또는 v8:: 중 하나에 직접 액세스 할 수없는,하지만 using namespace v8; 지침 등 글로벌 네임 스페이스에 internal:: (네임 스페이스 이름이 아닌 내용)을 포함 v8 문자 끌어

당신은 분명히 알고 있듯이, 하나의 이름을 다른 네임 스페이스로 가져 오는 다른 방법은 using 디렉 티브와 typedef 디렉 티브입니다. v8::Arguments이라는 다른 클래스가 없으면 typedef가 있거나 v8::internal::Argumentsv8::v8::Arguments으로 가져 오는 지시문을 사용합니다.


Node.js를의 V8 소스 코드에서 빠른 보면, 참으로 line 1946에서 네임 스페이스 v8::에 정의 된 네임 스페이스 v8::internal::line 3709 때까지 열리지 않습니다 v8::Arguments라는 이름의 클래스가있다.

+0

이것은 질문에 대답하지 않습니다. 'v8 :: Arguments 사용하기 '지시어는 당신이 설명하는 어떤 경우에도 맞지 않습니다. –

+1

@ BjörnPollex : 의도적으로 설명 된 경우에 맞지 않습니다. 그것은 간접적 인 질문 일뿐입니다. 그 using 지시문은 (a) 다른 클래스 인'v8 :: Arguments'가 없으면 작동하지 않을 수 있습니다. 또는 (b)'v8 :: internal :: Arguments'를'v8 ::'로 끌어 오기 위해 지시어 나 typedef를 사용하는 어딘가가 있습니다. 나는 이것을 내 대답에서 더 분명하게 할 것이다. –

관련 문제