c++クラスが衝突しているとき

  • 今、Aさんが作成したC++の諸関数群がある
  • Bさんが作成したC++の諸関数群がある
  • どちらも似たような目的で作られており、クラス名などが大幅に同名となっている。それぞれのクラスを定義した名前も同名になっている
  • 両方を使ったプログラムが書きたい。どうするか
  • ファイル自体に名前の衝突があるので、同じディレクトリに同居させられない
    • これに対する解決策としては
      • srcディレクトリ、includeディレクトリのそれぞれにディレクトリを切って、A用・B用のcppファイル、ヘッダーファイルを分けて配置し、#include "a/hoge.h", #include "b/hoge.h"というように指定し分けることもできる
      • A内、B内のincludeは相対パス的に変更ないので書き換える必要はなく、A,Bをまたがるときにディレクトリ構造付きの参照にすればよさそう
      • こうなると、多段makeのような処理が必要になってくる(こちら)。こうなってくるとCmake的なことをしたくなる…
      • ディレクトリを分けずに、ファイル名をちょっといじって(たとえばhoge.hをhogeB.hのように)、置ければよし、とする
        • この場合は、ヘッダーファイル、cppファイルの#include "hoge.h"を#include "hogeB.h"というように逐一書き換える
  • クラス名に名前の衝突があるので、クラスに名前空間を与えることとする
namespace a{

}
    • のようにA群、B群それぞれをとにかく名前空間で呼び分けられるようにする
  • この2点をクリアすれば、あとは、クラスを呼ぶときに名前空間付きとし、名前空間呼び出しする
a::Hoge p;
b::Hoge q;