自分のコードに、使用している動的ライブラリの名前空間コアと競合する名前空間コアがあります。どちらも変更できないため、問題が発生します。最初のコアは私たちのチーム プロジェクトの一部であり、2 番目のコアはライブラリの一部です。この状況を解決する方法はありますか?
3 に答える
コア名前空間をサブ名前空間に変えてみてください。
編集: 回答をクリーンアップし、コードを追加しました。(携帯では難しい!)
このようにして、各「コア」名前空間にアクセスできます。これはまた、どの「コア」が参照されているかを明示的に示しています。外部ライブラリの関数名が同じであっても安全です。
ただし、元のコードを実際に変更することはできないとおっしゃいました。そのため、唯一のオプションは、別のライブラリを使用し、「コア」名前空間が含まれていないことを願うことです。チームにコードを変更するよう説得する方がはるかに簡単なように思えます。
// Your 'core' namespace, inside your own namespace.
namespace Mygame
{
namespace core
{
void Foo();
}
}
// Access both namespaces safely.
Mygame::core::Foo();
core::Foo();
アクセスできる名前空間の名前を変更する必要があります。このような状況では、作成したもの (クラス、ライブラリ、名前空間など) にプレフィックスを付けて、同様の名前を使用する可能性のある他のアイテムと区別することをお勧めします。
たとえば、ゲーム マネージャーがある場合、クラスを呼び出すだけではありませんManager
。MygameGameManager
他のクラスと区別するために、または同様の名前を付けます。誰かが後でやって来てSoundManager
、プロジェクトに を追加した場合。命名規則では、物事を明確かつ明確にすることと、命名が冗長になりすぎることとの間でバランスを見つけることが重要です。バランスはそこにあります。それを見つける必要があります。
変化する
namespace core {
// define namespace members
}
に
namespace myproject_core {} // namespace "declaration"
using namespace core = myproject_core; // "namespace alias"
// core:: refers only to your code now
namespace myproject_core {
// define namespace members
}
これで、リンカーは競合を認識せず、コードは名前の変更を認識しません。
どちらも変更できないため、問題が発生します。
まあ、何も変更できない場合、解決策はありません。この回答では仮定を立てましたが、どのような変更が許容されるかを明確にすることができますか?