最近、プロジェクトに JavaScript V8 エンジンを含めることにしました。コンパイルしてリンクした後、 Getting Startedガイドから例を実行したいと思いました。
v8
一般的には機能しますが、各クラス名の前に名前空間を指定しないと、何らかの理由で名前空間の競合が発生します。たとえば、Visual Studio 2012 は、名前Context
があいまいになると教えてくれます。しかし、私はその理由を理解していません。
このファイルに含める名前空間はstd
とv8
. これはヘッダー ファイルであり、質問する前に、ヘッダーのみのライブラリであると主張しているため、そのように意図されています。
#pragma once
#include <string>
#include <vector>
#include <map>
#include <unordered_map>
#include <functional>
#include <memory>
#include <typeindex>
#include <iostream>
#include <fstream>
#include <V8/v8.h>
namespace library_name
{
using namespace std;
using namespace v8;
// here comes the example code and more...
}
その名前のシンボルContext
が定義されている場所を見つけるためにFind Definition
、Visual Studio でコンテキスト メニューから利用できるコマンドを使用しました。結果一覧です。
たとえばsf::Context
、プロジェクトで使用するものをリストしますが、そのヘッダーには使用しません。という名前のディレクトリ内のファイルにある不可解な名前空間にも定義がありますWindows Kits
。それらが何のためにあるのかはわかりませんし、意図的に含めたわけでもありません。上記のように、標準ライブラリと JavaScript V8 以外のヘッダー ファイルは含めません。
Context
異なる名前空間の が互いに衝突するのはなぜですか? v8
この衝突を修正して名前空間を使用するにはどうすればよいですか?