他の回答は、あなたが望むように見えることを行う方法を説明しています。しかし、名前空間が実際に設計されているものとは異なる目的で使用されているようです。
名前空間は、2 つの無関係な C++ コード ベースが互いに通信できるという問題を解決します。C には名前空間がなく、その結果、はるかに冗長になります。C で openssl や oauth などのサードパーティ ライブラリを使用してみてください。次のような関数呼び出しが多数見つかります。
openssl_create
openssl_connect
等々。そして、これは本当に、本当に重要です。可能性があるので、 という関数を書きたいと思いますconnect
。私が使った ZMQ ライブラリの作者もそうです。などなど。そして、同じ場所で呼び出されようとしている同じ名前の 2 つの関数を持つことは、非常に大きな苦痛です...
名前空間は純粋にソフトウェア エンジニアリングの構造であり、プログラミングの構造ではありません。これにより、プレフィックスがopenssl_
単純に名前空間になるため、上記のようなコードをより自由に混在させることができます。名前空間が競合しないのはなぜですか? これは、ソフトウェア エンジニアリングがさらに人間的かつ社会的になる場所です。基本的に、グローバル プログラミング コミュニティは、これが起こらないようにする必要があります。通常、外側の名前空間は会社です。Google の内部コードはすべて namespace にあると思いますGoogle
。Java は、インターネット ドメイン名によるパッケージ (名前空間など) の命名規則を促進することでこれを解決します。これはおそらく、競合することのない実世界のエンティティです。たとえば、Google コードはパッケージ内に存在する必要があります。com.google...
また、組織内では名前空間がアプリケーション、製品、またはチーム レベルで使用されることに注意する必要があります。たとえば、Google ドライブには、おそらく Google Mail と同様に「アップロード」機能がどこかにあり、それらのチームは通常、互いに会話しない可能性があります。 . ただし、混在するコードを記述する必要があります。それが名前空間の機能です。それ以上でもそれ以下でもありません。