1

外部ツールを使用するログ ライブラリを作成しようとしています。

ライブラリをより自然に使用できるようにするために、cout が使用されている名前空間を検出できるようにしたいと考えています。

具体的には、結果は次のように使用する必要があります

namespace A
{
    void foo()
    {
          cout << "Something went very wrong" << endl;
    }
}

namespace B
{
    void bar()
    {
          cout << "C should equal 3" << endl;
    }
}

int main()
{
    B::bar();
    A::foo();
}

結果の出力は次のようになります

MODULE::B : C should equal 3
MODULE::A : Something went very wrong

私はすでにstd::streambuf特定のキーワードを cout の出力に追加するために使用しています。必要なのは、どの名前空間でどの streambuf を使用するかを指定することだけです。

どうすればこれを達成できますか?

また、私が作成しているライブラリは、using namespace宣言を多用する複数の名前空間を持つプロジェクトに統合される予定です。これらの宣言を削除する必要のない解決策が必要です。

edit1:どの名前空間がどの文字列に関連付けられているかを手動で指定したり、使用されている名前空間にオブジェクトを追加したりする必要はありません (stdもちろん例外)

4

3 に答える 3

1

これは言語では不可能です。Clang を使用している場合は、Clang を再コンパイルして、そのようなタスクを実行できます。

于 2013-04-09T12:43:39.730 に答える