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::Hoge p; b::Hoge q;