やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

名前空間を使ってみた

前回ソースコードの分割方法を検討した。 ライブラリ化せずに、VC++のフィルタやファイルシステム上のディレクトリ構造にて分類した。 今回はそれに加えて名前空間もつけてみた。

完成図

入手先

GitHub MEGA

名前空間

  • ytyaru::Library::Uuid
  • ytyaru::Framework::SingleWindow
  • ytyaru::Framework::MultiWindow
  • ytyaru::Framework::MultiWindow::PartWndProc

ポイント

LibraryとFrameworkの部分にのみ名前空間をあたえた。

メインの部分は名前空間は与えていない。理由は以下の通り。

  • 再利用を考えていない
  • 重複はないとタカをくくっている
  • 面倒

もし与えるとしたら以下のようになるだろう。再利用しないなら冗長になるだけ。 他のプロジェクトへソースコードをコピペした場合、修正が面倒になる。

ytyaru::ProjectSplit201607300826

ディレクトリ構造

ディレクトリ構造

  • Solution
    • Release
      • .exe
    • Project
      • src
        • Main
          • Program.cpp
          • Window1
            • Window1.h
            • Window1.cpp
            • Initialize
              • InitializeWndProc.h
              • InitializeWndProc.cpp
            • Keyboard
              • KeyboardWndProc.h
              • KeyboardWndProc.cpp
    • src
      • Library
        • Uuid
          • Uuid.h
          • Uuid.cpp
      • Framework
        • MultiWindow
          • IWndProc.h
          • WndProcMapper.h
          • WndProcMapper.cpp
          • WndClassRegister.h
          • WndClassRegister.cpp
          • PartWndProc
            • IPartWndProc.h
            • Window.h
            • Window.cpp

ポイント

VC++フィルタ構造

VC++フィルタ構造

  • Solution
    • Project
      • Main
        • Main
          • Program.cpp
          • Window1
            • Window1.h
            • Window1.cpp
            • Initialize
              • InitializeWndProc.h
              • InitializeWndProc.cpp
            • Keyboard
              • KeyboardWndProc.h
              • KeyboardWndProc.cpp
      • Framework
        • MultiWindow
          • IWndProc.h
          • WndProcMapper.h
          • WndProcMapper.cpp
          • WndClassRegister.h
          • WndClassRegister.cpp
          • PartWndProc
            • IPartWndProc.h
            • Window.h
            • Window.cpp
      • Library
        • Uuid
          • Uuid.h
          • Uuid.cpp

ポイント

無駄なところは排除した。

  • srcは不要。IDE上の分類なのでソースコードと.rcファイル以外扱わないため
  • ytyaruは不要。それ以外の作者のソースコードライブラリを使っていないため

修正

全体的に以下のように修正した。

  • LibraryとFrameworkに名前空間を設定
  • Uuidの別ファイル化
    • これまでWndClassRegisterSingleWindow::WindowにUuid取得用関数をもたせていたが削除できた。
  • ヘッダにあるusing mamespace ...;を削除
    • 名前空間の汚染を最小限に抑える
    • 代わりにcppでusing Namespace::Class;を使用

所感

少しずつ完成度が高まってきたかも? 見た目のこともやりたいが、こういう地味なところもやりたい。