2011-12-17 11 views
2
クラスが v8::internal名前空間しかし、後でリード

ネストした名前空間はどのように機能しますか?

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; 
} 
// ... 
} 

で定義されている

Arguments私を〜にネストされた名前空間はどのように機能するのですか?

+0

多分、4人のダウンプレーヤーが、なぜこれがあまりにも恐ろしい質問であるかを精緻化するだろうか? – bitmask

+1

これは動作しません。おそらく、 'typedef internal :: Arguments Arguments'がv8名前空間にありますか? – neodelphi

+0

クラスの引数は、名前空間v8(行1934)で定義されているようです。前方宣言は何にも使われていないようです(実装はネームスペースに存在する必要はありません)。 – UncleBens

答えて

4

期待通りに機能します。単一レベルの名前空間(例:std::)がグローバルネームスペース::に既にネストされているとします。 using namespace std;ディレクティブが適用されていない限り、stdという名前のみがグローバル名前空間に登録され、std::のシンボルはグローバル名前空間に直接表示されません。

2番目のレイヤーを追加し、同じロジックを適用します。 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があります。私はこれを私の答えでより明確にするでしょう。 –

関連する問題